2021

Dec

21

Av Rolf

Tidigare i år skrev jag hur du kan exportera filer i JSON-format från FileMaker. Jag antar att du inte blir förvånad att det även går att importera JSON-filer till FileMaker? Det är inget av standardformaten i dialogrutan för import men JSON-formatet är flitigt använt i de flesta API-er och importeras oftast till FileMaker med manussteget Infoga från URL. Det går förstås lika bra att importera JSON-filer som finns lagrade på din lokala hårddisk.

Jag har hittat information om befolkningsmängd från 2020-12-31 i olika kommuner på skr.se (Sveriges Kommuner och Regioner) som jag vill importera till en FileMaker-databas. Databasen ska visa befolkning per kommun och summerat per län, samt i fallande storleksordning med avseende på folkmängden (som svar på frågan ”vilken kommun har flest invånare?”).

Resultatet blir så här:

Med knapparna Importera web och Importera fil importerar jag data i JSON-format från en webbadress respektive från en fil på min hårddisk. Knapparna Länsvis och Storleksordning byter mellan två olika layouter som sorteras på olika sätt.

Om data finns i JSON-format på webben använder du manussteget Infoga från URL. Manussteget kan se ut så här:

Data från en webbadress (url) hämtas till en variabel som jag valt att kalla för $data. Webbadressen har jag hittat på skr.se.(Observera att webbadressen i Infoga från URL ska vara ”skl.se”.)

Finns informationen i en fil på din lokala hårddisk använder du först manussteget Infoga fil för att importera filen till en variabel, i exemplet kallad $fil. Variabeln $fil är av typen ”container” och behöver konverteras till det text-baserade JSON-formatet med funktionen TextDecode.

Manusstegen kan se ut så här:

När informationen väl finns i variabeln $data behöver FileMaker gå genom samtliga ”poster” som finns. Det går att använda FileMakers inbyggda JSON-funktioner för att gå genom en post i taget direkt i JSON-informationen i variabeln $data, men enklast, och framförallt snabbast, är att använda funktionen JSONListValues för att hämta alla poster i $data till en lista med enstaka poster. Du slipper hålla reda på index i JSON-information, från och med nu är det som ett textfält där varje rad är en post. Posten är i JSON-format. För att hämta en post från listan använder du ”vanliga” funktionen GetValue.

På rad 19 i manuset hämtar jag alla värden från taggen ”results” i JSON-informationen till en lista med poster.

På rad 20 nollställs variabeln $i som används för att stega genom hela listan, på rad 22 ökas $i med 1. Det görs en gång i varje loop.

På rad 23 avbryts loopen när det inte finns fler poster i listan.

På rad 24 hämtas posten från en rad i listan med funktionen GetValue, sedan skapas en ny post i FileMaker-tabellen och  fälten i FileMaker tilldelas med värden med funktionen JSONGetElement. Det behövs en rad med Tilldela fält för varje fält.

Om det är många poster som behöver skapas utförs manuset med fördel på servern. Det kommer att gå snabbare. Att importera JSON med FileMaker Pro (eller FileMaker Go) går inte lika snabbt som att t.ex. importera en tab-separerad textfil eller ett Excel-dokument vilket du märker om du importerar stora mängder JSON-information. I det här fallet (290 poster) märks ingen skillnad.

Exempeldatabas kan du ladda ner här: ImporteraJSON.fmp12

Vill du prova att importera samma data från en fil kan du ladda ner en zip-fil med informationen här (packa upp den innan du importerar i FileMaker): SKR_befolkning_20201231.zip

Webbadressen till JSON-filen som finns hos skr.se kanske ändras i framtiden, då kan du ändra i databasens manus till denna webbadress istället (det är samma information):
https://filemakerbloggen.se/wp-content/uploads/2021/12/skr_befolkning_20201231.json

Skriv en kommentar

Din epost-adress stannar hos oss.