Mapowanie danych w formacie JSON Lines
Format danych JSON wciąż się rozwija jako otwarty standard, ponieważ jest kreatywnie wykorzystywany do nowych wymagań dotyczących wymiany danych. JSON Lines, zdefiniowany na stronie http://jsonlines.org/, to wygodny format tekstowy do przechowywania danych strukturalnych, w którym każdy rekord to pojedyncza linia i poprawny obiekt JSON. JSON Lines umożliwia obsługę danych tabelarycznych i wyraźnie identyfikuje typy danych bez dwuznaczności. Dzięki temu rekordy można przetwarzać pojedynczo, co czyni ten format bardzo przydatnym do eksportu i przesyłania danych.
Altova MapForce obsługuje mapowanie danych w formacie JSON Lines zarówno jako źródło, jak i jako miejsce docelowe. Przyjrzyjmy się projektowi mapowania, który pozwala na pobranie rekordów z tabeli bazy danych i przekształcenie ich do pliku JSON Lines jako wynik.

MapForce obsługuje zaawansowane mapowanie, konwersja i transformacja danych między popularnymi formatami danych a bazami danych relacyjnych. W tym przykładzie załóżmy, że naszym zadaniem jest utworzenie pliku JSON Lines zawierającego informacje przechowywane w tabeli bazy danych, która pierwotnie została stworzona dla aplikacji do ankiet mobilnych. Tabela "Cars" jest częścią bazy danych zawierającej nazwy modeli i specyfikacje samochodów różnych producentów.
Mapowanie danych: format JSON Lines jako format wyjściowy
Nasza strategia realizacji tego zadania mapowania danych w formacie JSON Lines jest prosta: analizujemy istniejącą tabelę bazy danych, tworzymy mały plik reprezentujący dane w formacie JSON Lines, następnie mapujemy kolumny z tabeli bazy danych na odpowiadające im elementy w wynikowym pliku JSON Lines, korzystając z narzędzia MapForce. Na koniec, wystarczy kliknąć przycisk "MapForce Output", aby automatycznie przetworzyć całą tabelę i wygenerować plik wynikowy.
Do wykonania każdego kroku będziemy korzystać z narzędzi z pakietu Altova MissionKit. Najpierw otworzymy bazę danych za pomocą programu DatabaseSpy i przejrzymy tabelę "Cars" w widoku projektanta tabel:

Tabela zawiera 9 kolumn, które odpowiadają typom danych tekstowych (string) i numerycznym, chociaż w niektórych kolumnach dopuszczalne są wartości null. Okno po lewej stronie wyświetla liczbę 6266 wierszy danych. Możemy użyć menu kontekstowego, które pojawia się po kliknięciu prawym przyciskiem myszy, aby wyświetlić pierwsze 200 wierszy i zapoznać się z danymi:

Wiersze 6 i 7 pokazują, że niektóre wiersze rzeczywiście zawierają puste dane. Teraz, gdy rozumiemy strukturę danych źródłowych, możemy utworzyć mały plik przykładowy, który będzie reprezentował tę strukturę w pojedynczej linii JSON Funkcje edycji plików JSON Program XMLSpy oferuje doskonałe narzędzie:

Nasze dane wejściowe w formacie JSON są kolorowane w programie XMLSpy, co pozwala nam zweryfikować, czy plik jest poprawny. Należy zauważyć, że zapisaliśmy plik z rozszerzeniem .jsonl, aby wskazać, że zawiera on dane w formacie JSON Lines.
Następnie, utworzymy nowy plik MapForce do mapowania danych i wkleimy do niego tabelę z bazy danych oraz plik instancji w formacie .jsonl:

Po zaimportowaniu pliku .jsonl, MapForce automatycznie utworzył schemat JSON, który opisuje możliwe typy danych dla każdego elementu w tablicy, reprezentującej nasze dane. Domyślny schemat opisuje tylko jeden element, ale możemy go wybrać i użyć menu kontekstowego, aby dodać duplikaty, tworząc 8 dodatkowych elementów potomnych:

Następnie łączymy kolumny bazy danych z odpowiednim typem danych dla każdego elementu w tablicy JSON, a także łączymy tabelę "Cars" z pierwszym elementem na górze schematu JSON. To polecenie informuje mechanizm mapowania, aby dla każdego wiersza w tabeli "Cars" tworzył nową linię wyjściową.

Możemy kliknąć przycisk "Wyeksportuj" znajdujący się na dole okna mapowania, aby przekonwertować całą tabelę i wyświetlić podgląd wyników. Istnieje jednak pewne zastrzeżenie: nie uwzględniliśmy wartości null. Jeśli teraz zapiszemy plik wyjściowy, wszystkie wartości null w bazie danych zostaną pominięte, co spowoduje, że w pliku JSON Lines pojawią się wiersze zawierające mniej niż 9 pól. Takie wiersze byłyby niemożliwe do prawidłowej interpretacji podczas późniejszej obróbki.
Mapowanie danych JSON w formacie linii, zawierające wartości null
MapForce zawiera filtr, który można zastosować, aby identyfikować i obsługiwać pola zawierające wartości null

Pojedynczy element w tablicy JSON nie może jednocześnie być liczbą i wartością null. Filtry i powiązane komponenty wskazują, że wartości null w kolumnie "Cylinder" zostaną przekształcone na typ danych null w elemencie numer 4. Jeśli wartość nie jest null, zostanie przekształcona na typ danych liczbowych. Możemy wykorzystać tę identyczną strukturę filtra dla wszystkich pozostałych kolumn, które mogą przyjmować wartości null.
MapForce oferuje funkcję tworzenia własnych funkcji, która pozwala na zapisywanie struktury filtra i ponowne wykorzystywanie jej w bieżącym mapowaniu oraz w innych mapowaniach danych JSON, które zawierają wartości null. Po prostu wybieramy filtr i powiązane komponenty, a następnie wybieramy opcję "Utwórz własną funkcję" z głównego menu "Funkcje":

Funkcja użytkownika zawiera wybrane komponenty, zastępuje nimi odpowiednie elementy w oryginalnym mapowaniu i jest dodawana do biblioteki funkcji

Możemy po prostu przeciągnąć funkcję użytkownika z biblioteki i połączyć ją z innymi kolumnami bazy danych, które mogą przyjmować wartości null.
Czasami, podczas mapowania danych w formacie JSON, może być korzystne, aby wartość tekstowa równą null była mapowana na pusty ciąg znaków. MapForce może obsłużyć takie wymaganie za pomocą funkcji zastępowania brakujących wartości. Na poniższym obrazku, wartość tekstowa równa null w ostatniej kolumnie bazy danych jest mapowana na pusty ciąg znaków:

Oto przykład gotowego mapowania danych z wykorzystaniem funkcji użytkownika do wykrywania wartości null:

Zwróć uwagę na funkcję użytkownika "null-detector", która jest wyróżniona w oknie "Biblioteki" po lewej stronie.
Teraz, gdy uwzględniliśmy wszystkie możliwe wartości null, możemy kliknąć przycisk "Wygeneruj", aby utworzyć plik wyjściowy w formacie .jsonl:

Należy zauważyć, że w linii 1675 oraz w innych liniach znajdują się zarówno wartości null, jak i puste ciągi znaków, natomiast linie 1690-1691 są w pełni wypełnione danymi.
W przypadku jednorazowej transformacji, plik wynikowy można natychmiast zapisać. Jeśli baza danych jest regularnie aktualizowana i wymaga ponownej transformacji w przyszłości, możemy zapisać mapowanie jako plik wykonywalny dla MapForce Server, który umożliwi automatyczne przetwarzanie, lub wdrożyć go bezpośrednio do FlowForce Server.
Mapowanie danych: pliki JSON Lines jako źródła
Poniższy schemat mapowania danych ilustruje sposób przekształcenia podobnego zestawu danych z pliku źródłowego w formacie .jsonl do tabeli w bazie danych.

Aby uczynić tę wersję bardziej przejrzystą, zmodyfikowaliśmy schemat JSON w programie XMLSpy, dodając opisy i usuwając nieprawidłowe typy danych dla każdego elementu w tablicy. Kliknięcie przycisku "Wygeneruj" dla tego odwzorowania spowoduje utworzenie skryptu SQL, który zostanie użyty do załadowania danych do tabeli bazy danych.
Należy pamiętać, że żaden z elementów oznaczonych jako "null" nie wymaga połączenia między źródłem a celem. Wszelkie niezbędne wartości "null" są automatycznie dodawane do tabeli bazy danych, jak widać na linii 18:

Pobierz bezpłatną wersję próbną, która zawiera samouczki, pomoc oraz wiele przykładów, aby rozpocząć pracę nad własnym projektem związanym z mapowaniem danych w formacie JSON Lines lub innymi potrzebami dotyczącymi mapowania, konwersji i transformacji danych!