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:
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
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