Data-mapping in JSON-formaat

Het JSON-gegevensformaat blijft zich ontwikkelen als een open standaard, omdat het op creatieve wijze wordt toegepast op nieuwe eisen voor gegevensuitwisseling. JSON Lines, gedefinieerd op http://jsonlines.org/, is een handig tekstformaat voor het opslaan van gestructureerde gegevens, waarbij elk record een enkele regel is en een geldig JSON-object. JSON Lines is geschikt voor het verwerken van tabelgegevens en identificeert datatypes op een duidelijke en ondubbelzinnige manier. Dit maakt het mogelijk om records één voor één te verwerken, waardoor dit formaat zeer nuttig is voor het exporteren en verzenden van gegevens.

Altova MapForce ondersteunt het gebruik van JSON Lines als bron- of doelbestand voor data. Laten we eens kijken naar een mappingproject waarin gegevens uit een database worden geëxtraheerd en worden omgezet naar een JSON Lines-bestand als uitvoer.

MapForce ondersteunt geavanceerde data-mapping, -conversie en -transformatie tussen alle gangbare dataformaten en relationele databases. Laten we voor dit voorbeeld aannemen dat we de opdracht hebben gekregen om een JSON Lines-bestand te maken dat de informatie bevat die is opgeslagen in een database-tabel, oorspronkelijk gemaakt voor een mobiele enquête-applicatie. De tabel "Cars" maakt deel uit van een database die modelnamen en specificaties van auto's van een breed scala aan fabrikanten bevat.

Data-mapping met JSON-lijnen als uitvoerformaat

Onze strategie voor het voltooien van deze taak om JSON Lines-gegevens te mappen is eenvoudig: we bekijken eerst de bestaande database-tabel, creëren vervolgens een klein voorbeeldbestand om de gegevens in JSON Lines-formaat weer te geven. Vervolgens mappen we de kolommen van de database-tabel naar de overeenkomstige elementen in de JSON Lines-uitvoer met behulp van een MapForce-mapping. Tot slot klikken we eenvoudigweg op de MapForce-uitvoerknop om de hele tabel automatisch te verwerken en het uitvoerbestand te genereren.

We zullen tools uit de Altova MissionKit gebruiken om elke stap te voltooien. Allereerst openen we de database met DatabaseSpy en bekijken we de tabel "Cars" in de tabelweergave van de ontwerper:

De tabel bevat 9 kolommen die corresponderen met JSON-strings en numerieke datatypes, hoewel sommige kolommen lege waarden mogen bevatten. Het venster aan de linkerkant toont het aantal van 6.266 datarijen. We kunnen het contextmenu activeren door met de rechtermuisknop te klikken om de eerste 200 rijen op te halen en de data te bekijken:

Regels 6 en 7 laten zien dat sommige rijen inderdaad null-waarden bevatten. Nu we de brongegevens begrijpen, kunnen we een klein voorbeeldbestand maken om de datastructuur weer te geven in een enkele JSON-regel. De functies voor het bewerken van JSON in XMLSpy bieden een uitstekend hulpmiddel:

Onze JSON-invoer is in XMLSpy gekleurd, waardoor we kunnen controleren of het bestand correct is opgebouwd. Let op dat we het bestand hebben opgeslagen met de extensie .jsonl om aan te geven dat het om JSON Lines gaat.

Vervolgens openen we een nieuwe MapForce-mapping en voegen we de database-tabel en het .jsonl-bestand toe:

Toen we het .jsonl-bestand importeerden, creëerde MapForce automatisch een JSON-schema dat de mogelijke datatypes beschrijft voor elke cel in de array die onze data weergeeft. Het standaardschema beschrijft slechts één item, maar we kunnen dit item selecteren en via het contextmenu duplicaten toevoegen, waardoor er 8 extra elementen ontstaan:

Vervolgens koppelen we de kolommen van de database aan het juiste gegevenstype voor elke cel in de JSON-array, en we koppelen ook de tabel "Cars" aan het eerste item bovenaan het JSON-schema. Dit instrueert de mapping om een nieuwe uitvoerregel te creëren voor elke rij in de tabel "Cars".

We kunnen op de knop "Output" onderaan het venster voor de mapping klikken om de hele tabel om te zetten en het resultaat te bekijken. Er is echter één complicatie: we hebben nog geen rekening gehouden met lege waarden. Als we nu het uitvoerbestand opslaan, worden alle lege waarden in de database volledig overgeslagen, waardoor er rijen in het JSON Lines-bestand ontstaan met minder dan 9 velden. Deze rijen zouden later moeilijk correct te interpreteren zijn.

Data-mapping van JSON-bestanden met null-waarden

MapForce bevat een filter waarmee we lege velden kunnen identificeren en verwerken

Een enkel element in de JSON-array kan niet tegelijkertijd een getal en een null-waarde zijn. De filter en de gerelateerde componenten geven aan dat null-waarden in de kolom "Cilinder" worden omgezet naar het null-datatyper in item 4. Als het geen null-waarde is, wordt het omgezet naar het numerieke datatype. We kunnen deze identieke filterstructuur gebruiken voor alle overige kolommen die null-waarden kunnen bevatten.

MapForce bevat een functie waarmee gebruikersfuncties kunnen worden aangemaakt. Dit stelt ons in staat om de filterstructuur op te slaan en deze te hergebruiken in deze mapping, en in andere JSON-datamappings die null-waarden bevatten. We selecteren eenvoudigweg het filter en de bijbehorende componenten en kiezen vervolgens "Maak gebruikersgedefinieerde functie" vanuit het hoofdmenu "Functie":

De gebruikersfunctie omvat de geselecteerde componenten, vervangt deze in de oorspronkelijke mapping en wordt toegevoegd aan de functiebibliotheek

We kunnen de gebruikersfunctie eenvoudigweg uit de bibliotheek slepen en deze verbinden met de andere databasekolommen die null-waarden kunnen bevatten.

Soms, bij het omzetten van JSON-gegevens, kan het wenselijk zijn om een null-waarde (een lege waarde) om te zetten naar een lege string. MapForce kan dit realiseren met een functie voor het vervangen van ontbrekende waarden. In de afbeelding hieronder wordt een null-waarde in de laatste databasekolom omgezet in een lege string:

Hieronder een overzicht van de voltooide datamapping, inclusief de gebruikersfunctie voor het detecteren van ontbrekende waarden:

Let op de gebruikersfunctie voor de nuldetectie, die gemarkeerd is in het venster "Bibliotheken" aan de linkerzijde.

Nu alle mogelijke ontbrekende waarden zijn verwerkt, kunnen we op de knop "Output" klikken om het .jsonl-uitvoerbestand te genereren:

Let op dat regel 1675 en andere regels zowel een nulwaarde als een lege string bevatten, maar dat regels 1690-1691 volledig zijn gevuld met gegevens.

Voor een eenmalige transformatie kan dit uitvoerbestand direct worden opgeslagen. Als de database voortdurend wordt bijgewerkt en later opnieuw getransformeerd moet worden, kunnen we de mapping opslaan als een MapForce Server-uitvoerbestand voor geautomatiseerde verwerking met MapForce Server, of we kunnen het direct implementeren op FlowForce Server.

Gegevensmapping met JSON-bestanden als bron

De onderstaande datamapping illustreert hoe een vergelijkbare dataset van een .jsonl-bestand kan worden omgezet naar een database-tabel.

Om deze versie duidelijker te maken, hebben we het JSON-schema in XMLSpy bewerkt. We hebben beschrijvingen toegevoegd en ongeldige datatypes voor elke cel in de array verwijderd. Door op de knop "Output" voor deze mapping te klikken, wordt een SQL-script gegenereerd om de gegevens in de databasetabel te laden.

Let op dat geen van de lege items een verbinding vereisen van de bron naar de bestemming. Eventuele benodigde lege waarden worden automatisch in de database-tabel ingevoegd, zoals te zien is in regel 18:

Download een gratis proefversie, inclusief tutorials, hulp en veel voorbeelden, om direct aan de slag te gaan met uw eigen project voor het omzetten van JSON-bestanden of andere data, en voor andere behoeften op het gebied van data-omzetting en -transformatie!