sinds FileMaker 16 hebben we de beschikking over de functie: JSONSetElement ( json ; SleutelOfIndexOfPad ; waarde ; type ) (zie ook de FM-help: https://fmhelp.filemaker.com/help/16/fmp/nl/#page/FMP_Help%2Fjsonsetelement.html) De bedoeling is dan dat je een bestaande JSON (of een lege) aanvult.
Gegevens voorbereiden
Er zijn op internet diverse leuke voorbeelden te vinden waarmee men dan enveloppen maakt, die met een post kunnen worden ge-upload naar een webservice. In zulke gevallen moet je het pad correct hebben en de veldtype juist instellen, terwijl in de voorbereidingen de data al is geprepareerd. Booleaanse waarden en tijdstempels vragen dan soms nogal wat programmering. Een boolean moet worden weergegeven als true of false en niet als “true” of “false” en ook niet als 0 of 1.
Tijdstempels
Een tijdstempel moet meestal worden weergegeven als een UTC-tijd plus de tijdcorrectie van de tijdzone. De tijdstempel zelf moet volgens ISO8601, wat er als geheel als “2017-10-10T14:10:37+02:00” uitziet.
Decimalen
Decimale getallen moeten een punt gebruiken als decimaal-teken.
Eigen functies
Het is in deze gevallen handig om de naar JSON om te zetten informatie alvast in de juiste vorm te hebben, maar het is niet handig om dat allemaal te moeten programmeren. De data in de juiste veldtypen neerzetten en vervolgens aan de hand daarvan mbv een “eigen functie” of “custom function” (CF) omvormen naar JSON is dan verreweg het handigste.
Voorbeeld
In het voorbeeld bestand zitten slechts 2 CF’s. Ééntje om een tijdstempel om te zetten naar ISO8601 met zone-correctie en nog eentje. (die daar indien nodig daarvan gebruik maakt) Om de JSON te fabriceren van een layout met velden waarvan je een JSON-object wilt maken.
Booleans
Er is slechts één catch: in de velddefinities van een nummer-veld dat als “boolean” in de JSON dient, moet in het commentaar het woord “boolean” worden opgenomen. Voor al het andere volstaat het om het veld een naam te geven en het juiste type: tekst (string), getal (number), timestamp (string). JSON-objecten worden aangeduid door een punt “.” op te nemen in de naam.
Arrays
Arrays heb ik in dit voorbeeld buiten beschouwing gelaten, want die heb ik nog niet nodig gehad… Wie zich geroepen voelt om arrays in deze functie te integreren, is bij deze daarvoor van harte uitgenodigd. Doe je dat goed, dan publiceer ik dat resultaat hier met uiteraard alle credentials 🙂
Werking
De werking is heel eenvoudig: plaats de naar de JSON te converteren velden op een layout en de CF berekent de juiste JSON-weergave. In het voorbeeld heb ik de “pretty-print” functie JSONFormatElements gebruikt, maar dat is alleen maar om het voor ons mensen leesbaarder te maken. Gebruik je de functie om een envelop naar een webservice te uploaden, dan doe je dat niet.
De Download
Dat het belangrijkste als laatste, hier kan je het bestand downloaden: Record naar JSON-object