JSON uitlezen

in FileMaker is behoorlijk lastig ben ik achtergekomen. Er is over JSON heel veel documentatie te vinden, maar dat is allemaal gericht op het gebruik van libraries in javascript, php etc.

Voor FileMaker zijn er dan voor zover ik heb gevonden 2 plug-ins beschikbaar waar je JSON mee kan uitlezen (en deels ook bewerken, maar dat is buiten de scope van dit artikel). De gratis Base-Elements plug-in van goya (BE) en de MBS FileMaker plug-in van Monkeybread Software (MBS) De beide plug-ins werken, maar hebben allebei zo hun voor- en nadelen.

De plug-in kosten

In beide gevallen is dat beslist niet de prijs, want de BE is gratis en de MBS is pakweg 100 euro en allebei bevatten ze een ton aan functies. Mijn bezwaren zitten vooral in het feit dat ze allebei nogal groot, een beetje teveel functies bevatten. De BE is open-source en je weet gewoon niet wat er morgen nog in zit. De MBS zit zo vol dat je door de bomen het bos niet ziet. Voor beide plug-ins geldt dat de documentatie volledig lijkt, maar in de praktijk ben je erg lang bezig basis-functies goed werkend te krijgen.

Plug-inloze alternatieven

Er zijn ook alternatieven waarmee je zonder plug-ins JSON kan uitlezen en op http://www.modularfilemaker.org staat er zelfs een kompleet uitgewerkt voorbeeld in FileMaker. Het is een zeer uitgebreid bestand en het is heel knap gemaakt, maar het werkt met een hele bak met scripts, velden global-variables.

Even in je eigen solution integreren is er eigenlijk niet bij, je doet het simpelst dat bestand aan je systeem toevoegen en dan gebruik je dat voortaan als “blackbox” waar je json met een vraag instuurt en antwoord terug krijgt. Het is een methode die prima kan werken wanneer je een hele simpele JSON wilt uitlezen en er slecht enkele gegevens uit wilt hebben.

Zitten er echter 10-tallen velden in die je wilt uitlezen, dan wordt de overhead al snel teveel en wil je sneller kunnen werk en korter op je gegevens zitten.

Met die situatie in het achterhoofd ben ik de afgelopen weken flink aan het zoeken geweest naar goede methoden en heb diverse oplossingsroutes afgelopen en ben daar ook diverse keren vastgelopen. Uiteindelijk ben ik uitgekomen op een werkwijze met enkele hele specifieke custom-functions.

Collega

Jos Hofman zag mijn arbeidsvrucht en was zelf ook al een tijdje bezig met iets soortgelijks en heeft getriggerd door mijn werk, zijn eigen json-functies afgemaakt. Zijn functies werken zoveel beter dan die van mij, dat ik de mijne aan de kant geschoven en nu zijn functies gebruik.

Jos vroeg me of ik zijn functies wilde publiceren en uiteraard wil ik dat.

Implementeren

Ik ga dit keer niet uitweiden over de details van de ontwikkeling en volsta met een globale beschrijving van het proces waarmee het uitlezen tot stand komt.

Als gebruiker om de zaak te integreren in jouw eigen oplossingen heb je maar 2 stappen te doen:

  1. Alle custom-function in het voorbeeldbestand importeren in je eigen bestand.
  2. Met de functie Json_path ( p_data ; p_path ) lepel je elke gewenst pad uit een JSON, de syntax is heel simpel: “element[i]/element[i]”. De index [i] geeft de occurence van een element aan en laat je die leeg, dan wordt de eerste occurrence gebruikt.

De werking

bestaat uit grofweg drie delen:

  • De hoofdfunctie roept met alle tekst een functie aan die naar het eerste object van een pad op zoek gaat en bepaalt wat voor een object dat is: object, tekst, getal of lijst
  • Afhankelijk daarvan wordt 1 van 4 functies aangeroepen die specifiek dat type resultaat uit de data gaat filteren
  • Met het resultaat wordt samen met het overgebleven pad naar het volgende element/object gezocht door de hoofdfunctie zichzelf weer aan te laten roepen. Totdat het uitleespad geen “vragen” meer bevat

Dat is in een vogelvlucht hoe het werkt. Bekijk gerust de custom functies in het bestand, want de uiteindelijke werking is iets gedetaileerder, dan dat ik hier heb beschreven. Veel plezier met de functies en als je vragen hebt, stel ze op http://www.clarify.net Jos is uiteraard de expert van deze functies, ik ben slechts de boodschapper 😀

Download Evaluate_JsonPaths versie 2.03 DD20161002

 

EDIT: FileMaker 16

Met de komst van FM 16 zijn er JSON-functies in FileMaker aan boord en heb je geen custom-functions meer nodig om JSON in je oplossing te integreren. Zie ook de help van FileMaker.

 

Versie-historie:
Versie Datum Opmerkingen
2.03 161002 Evalueren van een nummer in lijst met objecten toonde een komma teveel, wanneer het uitgelezen getal niet de waarde van het laatste object is.
2.02 161001 Errortrapping toegevoegd. Bij een niet bestaand pad wordt $$-102 getoond
Foutje verwijderd met uitlezenvan een nummmer, er werden soms teveel values teruggestuurd.
2.0 160930 Functies van Jos Hofman ingebouwd en van Menno verwijderd. De functies van Jos bevatten een extra recursielaag en gebruikt geen evaluate-let. Daardoor werkt het geheel vooral bij grotere json’s aanmerkelijk sneller (factor 8-10)
1.0 160925 Eerst publicatie met evaluate-let en P() als hart van de functie. Snel bij kleine json, trager bij grotere
Tags: , , ,
Top