Een app op maat maken > Werken met formules en functies > Werken met de JSON-functies
 

Werken met de JSON-functies

FileMaker Pro Advanced heeft verschillende tekstfuncties waarmee uw oplossing JSON-gegevens uit andere bronnen kan parseren en wijzigen, zoals webservices die gegevens in JSON-structuur via een REST API overbrengen.

Raadpleeg json.org voor meer informatie over de JSON-gegevensstructuur.

JSON-gegevens vanaf een webservice ophalen

Gebruik de Invoegen vanuit URL scriptstap om toegang tot een webservice te krijgen, parameters voor de op te halen informatie op te geven, HTTP-headers te versturen en te ontvangen en de resultaten in een variabele of een veld op te slaan.

Bijvoorbeeld: een bakkerij maakt de lijst met producten beschikbaar voor klanten in JSON-structuur via een REST API. Het volgende geeft als resultaat de lijst met speciale gebakjes als JSON-gegevens in de $$JSON-variabele:

Variabele instellen [ $url ; "https://bakkerij.voorbeeld.com/rest/api/producten" ]Invoegen vanuit URL [ Met dialoogvenster: Uit; Doel: $$JSON ; $url ; SSL-certificaten verifiëren ; cURL-opties: "--data list=speciale gebakjes" ]

Raadpleeg Voorbeeld van JSON-gegevens voor de gegevens die als resultaat in $$JSON worden verkregen.

FileMaker Pro Advanced heeft ook verschillende hulpfuncties die de tekencodering en de cryptografische ondertekening vereist door bepaalde REST API's ondersteunen:

HexDecode functie

HexEncode functie

TextDecode functie

TextEncode functie

Base64Decode functie

Base64EncodeRFC functie

CryptAuthCode functie

CryptDigest functie

CryptGenerateSignature functie

CryptVerifySignature functie

JSON-gegevens opmaken

JSON-gegevens vereisen geen spaties of regeleinden tussen elementen. Om de gegevens toch beter te kunnen lezen wanneer u problemen oplost, gebruikt u de JSONFormatElements functie die tabs en regeleinden toevoegt, zoals u in Voorbeeld van JSON-gegevens kunt zien.

JSON-gegevens parseren

Gebruik de volgende JSON-functies om JSON-gegevens te parseren. Hieronder verstaan we het ophalen van sleutels, waarden of complete JSON-objecten of arrays die u verder kunt verwerken:

JSONGetElement – Vraagt JSON-gegevens op voor een element (een object, array of waarde)

JSONListKeys – Geeft een lijst met de objectnamen (sleutels) of array-indexen in JSON-gegevens

JSONListValues – Geeft een lijst met de waarden in JSON-gegevens

De eerste parameter van deze functies, json, geeft het tekstveld, de variabele of de tekstuitdrukking op die geldige JSON-gegevens bevat die kunnen worden bewerkt.

De tweede parameter, SleutelOfIndexOfPad, geeft het deel van de JSON-gegevens op die moeten worden bewerkt:

sleutel – de naam van een sleutel in een JSON-object

index – de index van een element in een JSON-array (het eerste element heeft de index 0)

pad – een hiërarchische reeks sleutelnamen, array-indexen of beide

De volgende syntaxis voor de parameter SleutelOfIndexOfPad wordt ondersteund.

 

Parameter SleutelOfIndexOfPad

Betekent

"."

(optioneel) Het hoofdniveau, als het het eerste teken is

".[n]"

Elementen bij index n van een array op het hoofdniveau

".naam"

De sleutel van een object met de naam naam op het hoofdniveau

".naamA.naamB.naamC"

Een object met de naam naamC dat een onderliggend element van naamB en naamA is

".[3][2][1]naamA[0]"

Het eerste element van de array in het object naamA, dat zich op het derde niveau in een reeks geneste arrays bevindt

In het volgende voorbeeldscript wordt het aantal producten in het Voorbeeld van JSON-gegevens bepaald (opgeslagen in de $$JSON-variabele) met behulp van JSONListKeys, wordt een record voor elk product gemaakt en worden velden in elke record ingesteld op de waarden die met JSONGetElement voor elk product worden verkregen.

Variabele instellen [ $ProductCount ; Waarde:
   ValueCount (
      JSONListKeys ( $$JSON ; "bakkerij.product" )
   ) ]
Variabele instellen [ $i; Waarde: 0 ]
If [ $ProductCount > 0 ]
   Loop
      Nieuwe record/nieuw verzoek
      Veld instellen [ Producten::ID ;
         JSONGetElement ( $$JSON ; "bakkerij.product[" & $i & "]id" ) ]
      Veld instellen [ Producten::Prijs ;
         JSONGetElement ( $$JSON ; "bakkerij.product[" & $i & "]prijs" ) ]
      Veld instellen [ Producten::Voorraad ;
         JSONGetElement ( $$JSON ; "bakkerij.product[" & $i & "]voorraad" ) ]
      Records/verzoeken vastleggen [ Met dialoogvenster: Uit ]
      Variabele instellen [ $i ; Waarde: $i + 1 ]
      Exit Loop If [ $i $ProductCount ]
   End Loop
End If

JSON-gegevenselementen wijzigen en toevoegen

Gebruik de JSONSetElement functie om in JSON-gegevens waarden te wijzigen en elementen toe te voegen. De parameters json en SleutelOfIndexOfPad werken in deze functie zoals beschreven in JSON-gegevens parseren. Als in SleutelOfIndexOfPad een bestaand element is opgegeven, wordt de waarde van dat element gewijzigd. Als het element niet bestaat, wordt een nieuw element toegevoegd.

JSONSetElement stelt het opgegeven element in op de parameter waarde. U kunt een willekeurige geldige JSON-waarde opgeven, gaande van een eenvoudige tekenreeks of een getal tot een complex object of een complexe array.

De parameter type geeft het type gegevens in waarde op zodat de JSON-parser strikte regels volgt wanneer elk gegevenstype wordt verwerkt. Raadpleeg JSONSetElement functie voor de ondersteunde gegevenstypen. Om gegevens in json in te voegen die al zijn opgemaakt als een geldig JSON-element, stelt u type in op JSONRaw.

In het volgende voorbeeld worden de sleutel-waarde-paren voor een nieuw product toegevoegd aan een leeg JSON-object. Het nieuwe object wordt dan toegevoegd aan het einde van de productarray in de $$JSON-variabele (raadpleeg Voorbeeld van JSON-gegevens).

Variabele instellen [ $NewProduct ; Waarde:
   JSONSetElement ( "{}" ;
      [ "id" ; "FB4" ; JSONString ] ;
      [ "naam" ; "Vanillecake" ; JSONString ] ;
      [ "prijs" ; 17,5 ; JSONNumber ] ;
      [ "voorraad" ; 12 ; JSONNumber ] ;
      [ "categorie" ; "Cakes" ; JSONString ] ;
      [ "speciaal" ; waar ; JSONBoolean ]
   ) ]
Variabele instellen [ $NextIndex ; Waarde:
   ValueCount (
      JSONListKeys ( $$JSON ; "bakkerij.product" )
   ) ]
Variabele instellen [ $$JSON ; Waarde:
   JSONSetElement (
      $$JSON ; "bakkerij.product[" & $NextIndex & "]" ; $NewProduct ;
      JSONObject
   ) ]

JSON-gegevenselementen verwijderen

Gebruik de JSONDeleteElement functie om een element te verwijderen. De parameters json en SleutelOfIndexOfPad werken in deze functie zoals beschreven in JSON-gegevens parseren. De parameter SleutelOfIndexOfPad moet een bestaand element in json opgeven.

In het volgende voorbeeld wordt het element verwijderd in de productarray waarvan de sleutel "id" de waarde "FB3" heeft in de $$JSON-variabele (raadpleeg Voorbeeld van JSON-gegevens).

Variabele instellen [ $ProductCount ; Waarde:
   ValueCount (
      JSONListKeys ( $$JSON ; "bakkerij.product" )
   ) ]
Variabele instellen [ $i ; Waarde: 0 ]
If [ $ProductCount > 0 ]
   Loop
      Variabele instellen [ $ID ; Waarde:
         JSONGetElement ( $$JSON ; "bakkerij.product[" & $i & "]id" ) ]
      If [ $ID = "FB3" ]
         Variabele instellen [ $$JSON ; Waarde:
            JSONDeleteElement ( $$JSON ; "bakkerij.product[" & $i & "]" ) ]
         Script afsluiten [ Tekstresultaat: 0 ]
      End If
      Variabele instellen [ $i ; Waarde: $i + 1 ]
      Exit Loop If [ $i $ProductCount ]
   End Loop
End If

Fouten in JSON-gegevens verwerken

Als er een fout optreedt tijdens het parseren van de json-parameter, geven de JSON-functies als resultaat "?" gevolgd door een foutbericht van de JSON-parser.

Wanneer bijvoorbeeld ":" na de sleutel "bakkerij" ontbreekt in Voorbeeld van JSON-gegevens, geeft deze berekening

JSONGetElement ( $$JSON ; "bakkerij.product[0]id" )

dit foutbericht als resultaat:

? * Line 3, Column 2
  Missing ':' after object member name
* Line 13, Column 5
  Extra non-whitespace after JSON value.

Om te bepalen of JSON-gegevens geldig zijn alvorens ze te gebruiken, gebruikt u de JSONFormatElements functie en test u of het eerste teken "?" is. Bijvoorbeeld:

Variabele instellen [ $result ; Waarde: JSONFormatElements ( $$JSON ) ]
If [ Left ( $result ; 1 ) = "?" ]
   # $$JSON bevat ongeldige JSON-gegevens.
End If

Voorbeeld van JSON-gegevens

In het volgende voorbeeld bevatten de JSON-gegevens het object "Bakkerij" dat een array van drie "product"-objecten heeft, elk met verschillende sleutel-waarde-paren.

{
"bakkerij" :
{
"producten" :
[
{
"id" : "FB1",
"naam" : "Donuts",
"prijs": 1,99,
"voorraad" : 43,
"categorie" : "Broden",
"speciaal" : true
},
{
"id" : "FB2",
"prijs": 22,5,
"naam" : "Chocoladecake",
"voorraad" : 23,
"categorie" : "Cakes",
"speciaal" : true
},
{
"id" : "FB3",
"prijs": 3,95,
"naam" : "Stokbrood",
"voorraad" : 34,
"categorie" : "Broden",
"speciaal" : true
}
]
}
}

Opmerkingen 

De JSON-parser behoudt de volgorde van elementen in een array maar niet de volgorde van elementen in een object. Daarom kunnen JSON-functies elementen in een object in een andere volgorde dan de opgegeven volgorde geven.

Verwante onderwerpen 

Tekstfuncties

Containerfuncties