Arbeta med JSON-funktionerna
FileMaker Pro erbjuder flera textfunktioner som gör att lösningen kan tolka och ändra
JSON-data från andra källor, till exempel webbtjänster som överför data i JSON-format via en REST API.
Mer information om JSON-dataformatet finns i
json.org.
Hämtar JSON-data från en webbtjänst
Använd
scriptsteget Infoga från URL för att öppna en webbtjänst, ange parametrar för informationen som ska hämtas, skicka och ta emot HTTP-rubriker och lagra resultaten i en variabel eller ett fält.
Ett bageri gör exempelvis sin produktlista tillgänglig för klienter i JSON-format via en REST API. Följande returnerar listan över dagens specialerbjudanden som JSON-data i $$JSON-variabeln:
Ange variabel [ $url ; "https://<bakery_domain_name>/rest/api/products" ]
Sätt in från URL [ Verifiera SSL-certifikat ; Med dialogruta: Av; $$JSON ;
$url ; "--data list=specials" ]
Information om data som returneras i $$JSON finns i
Exempel på JSON-data.
FileMaker Pro erbjuder även flera programfunktioner som hanterar den teckentabell och kryptografiska signeringen som krävs av vissa REST API-er:
Formatera JSON-data
JSON-data kräver inte mellanslag eller radbrytningar mellan element. Du kan däremot göra det lättare att läsa data när du debuggar problem genom att använda
funktionen JSONFormatElements, vilket lägger till flikar och radslutstecken, som vi visar i
Exempel på JSON-data.
Tolka JSON-data
Använd följande JSON-funktioner för att tolka JSON-data, dvs. för att hämta nycklar, värden eller hela JSON-objekt eller -matriser som du kan behandla vidare:
•JSONGetElement – Frågar JSON-data om ett element (ett objekt, en matris eller ett värde.
•JSONListKeys – Listar objektnamnen (nycklar) eller matrisindex i JSON-data
Den första parametern för dessa funktioner, json, anger textfältet, variabeln eller textuttrycket som innehåller giltiga JSON-data att använda.
Den andra parametern, nyckelEllerIndexEllerSökväg, anger vilken del av JSON-data som ska användas:
•nyckel – namnet på en nyckel i ett JSON-objekt
•index – index för ett element i en JSON-matris (det första elementet har ett index på 0)
•sökväg – en hierarkisk sträng av nyckelnamn, matrisindex eller både och
Följande syntax för nyckelEllerIndexEllerSökväg-parametern stöds.
nyckelEllerIndexEllerSökväg-parameter | Betydelse |
"." | (valfritt) Roten, om det är det första tecknet |
".[n]" | Element vid index n av en matris i roten |
".namn" | Nyckeln till ett objekt med namnet namn i roten |
".namnA.namnB.namnC" | Ett objekt med namnet namnC, som är underordnad namnB och namnA |
".[3][2][1]namnA[0]" | Det första elementet för matrisen i objektet namnA, vilket är på den tredje nivån i en uppsättning av kapslade matriser |
Följande exempelscript avgör antal produkter i
Exempel på JSON-data (lagras i $$JSON-variabeln) med hjälp av JSONListKeys, skapar en post för varje produkt och anger sedan fält i varje post till de värden som inhämtas med JSONGetElement för varje produkt.
Ange variabel [ $ProduktAntal ; Värde:
ValueCount (
JSONListKeys ( $$JSON ; "bageri.produkt" )
) ]
Ange variabel [ $i; Värde: 0 ]
If [ $ProduktAntal > 0 ]
Loop
Ny post/sökpost
Tilldela fält [ Produkter::ID ;
JSONGetElement ( $$JSON ; "bageri.produkt[" & $i & "]id" ) ]
Tilldela fält [ Produkter::Pris ;
JSONGetElement ( $$JSON ; "bageri.produkt[" & $i & "]pris" ) ]
Tilldela fält [ Produkter::Lager ;
JSONGetElement ( $$JSON ; "bageri.produkt[" & $i & "]lager" ) ]
Verkställ poster/sökposter [Med dialogruta: Av ]
Ange variabel [ $i ; Värde: $i + 1 ]
Exit Loop If $i ≥ $ProduktAntal ]
End Loop
End If
Ändra och lägga till JSON-dataelement
Ändra värden och lägg till element i JSON-data med hjälp av
funktionen JSONSetElement. Parametrarna
json och
nyckelEllerIndexEllerSökväg arbetar i den här funktionen enligt beskrivningen i
Tolka JSON-data. Om
nyckelEllerIndexEllerSökväg anger ett befintligt element ändras värdet för det elementet; om elementet inte finns läggs ett nytt element till.
JSONSetElement anger det specificerade elementet till värde-parametern. Du kan ange ett giltigt JSON-värde från en enkel sträng eller siffra för komplicerade objekt eller matriser.
Parametern
typ anger typen av data i
värde så att JSON-tolkaren följer strikta regler vid hantering av varje datatyp. Information om vilka datatyper som stöds finns i
funktionen JSONSetElement. Om du vill infoga JSON-data i
json kan du ange
typ till
JSONRaw så att JSON-tolkaren kan bedöma datatypen för
värde.
Följande exempel lägger till nyckelvärdesparen för en ny produkt till ett tomt JSON-objekt. Det nya objektet läggs till i slutet av produktmatrisen i $$JSON-variabeln (se
Exempel på JSON-data).
Ange variabel [ $NyProdukt ; Värde:
JSONSetElement ( "{}" ;
[ "id" ; "FB4" ; JSONString ] ;
[ "namn" ; "Vaniljtårta" ; JSONString ] ;
[ "pris" ; 17.5 ; JSONNumber ] ;
[ "lager" ; 12 ; JSONNumber ] ;
[ "kategori" ; "Tårtor" ; JSONString ] ;
[ "special" ; sant ; JSONBoolean ]
) ]
Ange variabel [ $NästaIndex ; Värde:
ValueCount (
JSONListKeys ( $$JSON ; "bageri.produkt" )
) ]
Ange variabel [ $$JSON ; Värde:
JSONSetElement (
$$JSON ; "bageri.produkt[" & $NästaIndex & "]" ; $NyProdukt ;
JSONObject
) ]
Ta bort JSON-dataelement
Radera ett element med hjälp av
funktionen JSONDeleteElement. Parametrarna
json och
nyckelEllerIndexEllerSökväg arbetar i den här funktionen enligt beskrivningen i
Tolka JSON-data. Parametern
nyckelEllerIndexEllerSökväg måste ange ett befintligt element i
json.
Följande exempel tar bort elementet i den produktmatris vars "id-nyckel" har värdet "FB3" i $$JSON-variabeln (se
Exempel på JSON-data).
Ange variabel [ $ProduktAntal ; Värde:
ValueCount (
JSONListKeys ( $$JSON ; "bageri.produkt" )
) ]
Ange variabel [ $i ; Värde: 0 ]
If [ $ProduktAntal > 0 ]
Loop
Ange variabel [ $ID ; Värde:
JSONGetElement ( $$JSON ; "bageri.produkt[" & $i & "]id" ) ]
If [ $ID = "FB3" ]
Ange variabel [ $$JSON ; Värde:
JSONDeleteElement ( $$JSON ; "bageri.produkt[" & $i & "]" ) ]
Exit Script [ TextResultat: 0 ]
End If
Ange variabel [ $i ; Värde: $i + 1 ]
Exit Loop If $i ≥ $ProduktAntal ]
End Loop
End If
Hantera fel i JSON-data
Om det uppstår ett fel när
json-parametern tolkas returnerar JSON-funktionerna "?" följt av ett felmeddelande från JSON-tolken. Till exempel, när ":" efter "bageri" saknas i
Exempel på JSON-data, returnerar den här beräkningen
JSONGetElement ( $$JSON ; "bageri.produkt[0]id" )
följande felmeddelande:
? * Line 3, Column 2
Missing ':' after object member name
* Line 13, Column 5
Extra non-whitespace after JSON value.
Du kan bedöma om JSON-data är giltiga innan du använder dem genom att använda
funktionen JSONFormatElements och testa om det första tecknet är "?". Till exempel:
Ange variabel [ $resultat ; Värde: JSONFormatElement ( $$JSON ) ]
If [ Left ( $result ; 1 ) = "?" ]
# $$JSON innehåller ogiltiga JSON-data.
End If
Exempel på JSON-data
Följande exempel på JSON-data innehåller ett "bageriobjekt" som har en matris av tre produktobjekt, vart och ett med flera nyckelvärdespar.
{
"bageri" :
{
"produkt" :
[
{
"id" : "FB1",
"namn" : "Munkar",
"pris": 1,99,
"lager" : 43,
"kategori" : "Bröd",
"special" : true
},
{
"id" : "FB2",
"pris": 22,5,
"namn" : "Chokladtårta",
"lager" : 23,
"kategori" : "Tårtor",
"special" : true
},
{
"id" : "FB3",
"pris": 3,95,
"namn" : "Baguette",
"lager" : 34,
"kategori" : "Bröd",
"special" : true
}
]
}
}
Kommentar
•JSON-tolkaren bevarar ordningen på elementen i en matris, men inte ordningen på elementen i ett objekt. JSON-funktioner kan därför returnera element i ett objekt i en annan ordning än den angivna.
Relaterade avsnitt