Zagnieżdżone obiekty i tablice dobrze reprezentują strukturę, ale są niewygodne tam, gdzie potrzebna jest płaska lista par klucz-wartość — w arkuszach kalkulacyjnych, liniach logów czy plikach tłumaczeń. Flatten (spłaszczanie) rozwiązuje właśnie ten problem.
Jak to działa
Każde zagnieżdżone pole staje się jednym wierszem, gdzie klucz to pełna ścieżka do wartości (zapisana kropkami lub indeksami w nawiasach kwadratowych), a wartość to po prostu wartość. {"uzytkownik": {"adres": {"miasto": "Kraków"}}} zamienia się w parę uzytkownik.adres.miasto → "Kraków". Elementy tablicy otrzymują indeks w ścieżce, na przykład items[0].nazwa.
Gdzie to się pojawia: pliki tłumaczeń (i18n)
Płaskie klucze z notacją kropkową to standardowy format plików lokalizacyjnych w bibliotekach takich jak i18next czy vue-i18n — settings.profile.title zamiast zagnieżdżonego drzewa JSON. Platformy tłumaczeniowe i procesy oparte na arkuszach kalkulacyjnych niemal zawsze oczekują tej płaskiej formy, więc spłaszczenie zagnieżdżonego pliku językowego jest zwykle pierwszym krokiem przed przekazaniem go tłumaczowi.
Do czego to się przydaje w praktyce
- Import zagnieżdżonych danych z API do arkusza kalkulacyjnego lub płaskiej tabeli bazy danych.
- Ułatwienie czytelnego porównania wiersz po wierszu dwóch złożonych obiektów.
- Szybkie znalezienie konkretnej wartości w głęboko zagnieżdżonym JSON-ie dzięki widoczności całej ścieżki naraz.
Operacja odwrotna: unflatten
Odtworzenie zagnieżdżonej struktury z płaskiej listy oznacza rozbicie każdego klucza na segmenty ścieżki (na podstawie kropek i indeksów w nawiasach), a następnie stopniowe budowanie zagnieżdżonych obiektów i tablic. Niejednoznaczność pojawia się, gdy ścieżka może oznaczać dwie rzeczy — jeśli dane zawierają jednocześnie dosłowny klucz "a.b" i zagnieżdżoną ścieżkę a.b, unflatten nie może odgadnąć, o co chodziło, i zgłasza konflikt zamiast po cichu coś nadpisać.