Koostöö JSON-iga Power Fx

Power Fx võimaldab loojatel lugeda JSON-idünaamiliseks väärtuseks , kasutades funktsiooni ParseJSON .

Väärtuste lugemine ja teisendamine

ParseJSON teisendab järgmise JSON-kirjestringi väljadeItemName, QuantityReleaseDate ja AvailableForPreOrder.

{
  "ItemName" : "Widget 1",
  "Quantity" : 46,
  "ReleaseDate" : "2022-09-01",
  "AvailableForPreOrder" : true
}

Igale väljale pääseb juurde ParseJSON-i tagastatud dünaamilise väärtuse täpimärgiga.

Set( dynvalue, ParseJSON( jsonStringVariable ) );

Set( item, Text ( dynamic.ItemName ) );
Set( quantity, Value ( dynamic.Quantity ) );
Set( release, DateValue ( dynamic.ReleaseDate ) );
Set( preorder, Boolean ( dynamic.AvailableForPreOrder ) );

Üldiselt on mõistlik dünaamiline väärtus konkreetseks tüübiks teisendada. Dünaamilise väärtuse määramine muutujaks muudab ka muutuja dünaamiliseks väärtuseks. Seega on tõenäoliselt vaja muutujale seadistamisel sellist väärtust selgesõnaliselt teisendada. Kuid enamasti teisendatakse dünaamilised väärtused automaatselt kindlaks tüübiks ("koosseis"), kui seda kasutatakse funktsiooniparameetritena, kus tüüp on lihtne tüüp nagu kahendmuutuja, arv või tekst, ja funktsiooni parameetriprofiilil ei ole potentsiaalselt vastuolulist ülekoormust.

Left( dynamic.ItemName, 1 ); // "W"
Radians( dynamic.Quantity ); // 0.80285146
If (dynamic.AvailableForPreOrder, "Available", "Not Available" ); // "Available"

Lisaks funktsioonikutsete tüübi automaatsele teisendamisele teisendatakse võimaluse korral ka dünaamilised väärtused, kui need määratakse juhtelemendi atribuutidele.

Label1.Text: dynamic.Quantity
InputText1.Default: dynamic.ItemName

Kui tehtemärke nagu & või +, kasutatakse dünaamilist väärtust koos, kui eeldatud tüübis pole ebaselgust.

dynamic.Quantity + 1 // result is a number
dynamic.ItemName & " (preorder)" // result is text
dynamic.Quantity + dynamic.Quantity // result is a number
dynamic.Quantity & dynamic.ItemName // result is text

Märkus.

JSON-il pole tüüpi GUID, Color, Time ega DateTime . Need väärtused on esitatud stringina. Kui määrate tekstiatribuudile kuupäeva sisaldava JSON-i dünaamilise väärtuse, kasutatakse JSON-i algteksti. See võib olla oluline ajavööndite, kuupäevavormingute jms käsitlemisel. Sellistel juhtudel peaksite väärtused selgesõnaliselt teisendama, kasutades funktsioone GUID(), ColorValue(), DateValue(), DateTimeValue()) jne.

Kui välja nimi koosneb kehtetust identifikaatori nimest, näiteks kui väljanimed algavad numbriga või sisaldavad kehtetuid märke, näiteks sidekriipsu, saate väljade nimed panna jutumärkidesse:

dynamic.'01'
dynamic.'my-field'

Power Fx ei hinda välja olemasolu enne, kui valem on käivitatud. See võimaldab sissetuleva JSON paindlikkust. Näiteks eelmine JSON võib mõnikord sisaldada lisavälja nimega Discount. Kuid meie eelmises näites seda välja ei ole. Valemi kirjutamine, mis kasutab välja Discount, ei põhjusta rakenduse loomise protsessis ega kasutajate rakenduse kasutamisel vigu. Kui väli valemi käitamisel puudub, annab väärtus lihtsalt väärtuse Tühi().

Märkus.

JSON toetab null väljade väärtusi. Nende tulemuseks on ka Tühi() väärtused. Praegu ei tee Power Fx'is vahet puuduval väljal või väljal, mille väärtus on null.

Kuna dünaamilise väärtusega väljadele juurdepääsu valemi kirjutamisel ei hinnata, pole ka Intellisense saadaval. Nii JSON kui ka Power Fx on tõstutundlikud, seega olge väljade nimede kirjutamisel eriti ettevaatlik.

JSON-i väärtused ei pea olema kirje stiilis märkes. Kehtiv JSON võib olla lihtsalt väärtus, näiteks "text value", true või 123.456. Sellisel juhul on ParseJSON-i tagastatav dünaamiline väärtus väärtus ise ja punkte ei kasutata.

Set( myText, Boolean( ParseJSON( "true" ) ) );

Set( myNumber, Value( ParseJSON( "123.456" ) ) );

Lõpuks toetab JSON pesastatud kirjeid. Sellise JSON-i teisendamisel dünaamiliseks väärtuseks on pesastatud objektid ja punkteratsiooni saab kasutada hierarhia läbimiseks.

{
  "Version" : 1,
  "RootElement" : {
    "Parent" : {
      "Name" : "This is the parent",
      "Child" : {
        "Name" : "This is the child"
      }
    }
  }
}

Kui teisendate selle JSON-stringidünaamiliseks muutujaks nimega jsonObject, pääseb väljadele juurde punktmärgistuse abil.

Set( jsonObject, ParseJSON( jsonStringVariable ) );

Set( parentName, Text( jsonObject.RootElement.Parent.Name ) ); // "This is the parent"

Set( childName, Text( jsonObject.RootElement.Parent.Child.Name ) ); // "This is the child"

Kui punktitähistusavaldises mõnda välja pole olemas, tagastatakse Tühi().

Massiivid ja tabelid

JSON võib sisaldada väärtuste või kirjete massiive. Nendele massiividele pääseb juurde otse või saate need teisendada Power Fx tabeliteks.

{
  "OrderNumber" : "SO000010",
  "CustomerID" : "CUST0126",
  "OrderLines" : [
    {
      "Item" : "Widget 1",
      "Quantity" : 3
    },
    {
      "Item" : "Widget 2",
      "Quantity" : 5
    }
  ]
}

See JSON sisaldab kirjet väljaga OrderLines, mis sisaldab kirjete massiivi. Igal kirjel on kaks välja: Item ja Quantity. Kui JSON teisendatakse funktsiooni ParseJSON abil dünaamiliseks väärtuseks ja selle väärtuseks on määratud muutuja , jsonOrderpääseme üksikutele tellimusridadele juurde mitmel viisil.

Set( jsonOrder, ParseJSON( jsonStringVariable ) );

Üksikuid kirjeid ja väärtusi saate hankida funktsiooni Register() abil. Näiteks teise kirje saamiseks väljal OrderLines, avage seejärel Quantity välja ja teisendage see väärtuseks.

Set( line2Quantity, Value( Index( jsonOrder.OrderLines, 2 ).Quantity ) ); // 5

Tellimisridade massiivi saate teisendada otse tabeliks. Sellega luuakse üheveeruline tabel, mille dünaamilise väärtusega kirjet tähistatakse.

Set( orderLines, Table( jsonOrder.OrderLines ) );

Ühe veeruga tabelis "orderLines" on nüüd veerg Value, mis tähistab dünaamilist väärtust. Selle tabeli kirje mis tahes välja kasutamiseks kasutage punktmärki, et pääseda juurde veeru dünaamilise väärtuse konkreetsele JSON-väljaleValue.

Set( jsonRecord, Index( orderLines, 2 ) ); // Get the second record in the table

Set( line2Item, Text( jsonRecord.Value.Item ) ); // "Widget 2"

Selleks et muuta tellimusereakirjete kasutamine rakenduse muudes osades lihtsamaks ja lihtsamaks, saate funktsiooni ForAll() abil teisendada kogu dünaamilise väärtuse täielikult tipitud kirjeks. Dünaamilise väärtuse andmine väärtusele ForAll() tähendab, et üheveerulise Value välja kasutamise asemel pääsete objektiväljadele otse juurde.

Set( typedOrderLines, ForAll( jsonOrder.OrderLines, { Item : Text( ThisRecord.Item ), Quantity : Value( ThisRecord.Quantity ) } ) );

Uus muutuja typedOrderLines on nüüd täielikult tüübitud Power Fx tabel järgmiste veergude ja väärtustega:

Üksus Kogus
„Vidin 1” 3
„Vidin 2” 5

Eelmistes näidetes kasutatakse kirjete massiive, kuid JSON võib sisaldada ka ainult väärtuste massiive. Vaatleme järgmist näidet, mis on kehtiv string JSON, mis sisaldab kolmest stringist koosnevat massiivi.

[ "First Item", "Second Item", "Third Item"]

Funktsiooni Register() abil saame massiivist ühe üksuse tuua ja teisendada selle tekstiks.

Text( Index( ParseJSON( jsonStringVariable ), 2 ) ) // "Second Item"