Een oplossing maken > Werken met formules en functies > Werken met de JSON-functies
 
Werken met de JSON-functies
FileMaker Pro 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://<domeinnaam_bakkerij>/rest/api/producten" ]
Invoegen vanuit URL [SSL-certificaten verifiëren; Met dialoogvenster: Uit; $$JSON ;
$url ; "--data list=speciale gebakjes" ]
Raadpleeg Voorbeeld van JSON-gegevens voor de gegevens die als resultaat in $$JSON worden verkregen.
FileMaker Pro 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
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 JSON-gegevens in json in te voegen, kunt u type instellen op JSONRaw om de JSON-parser het gegevenstype van waarde te laten bepalen.
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: JSONFormatElement ( $$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