Scal JSON

#1Wejście
#2Wejście

Darmowe narzędzie online do scalania JSON. Połącz wiele obiektów JSON w jeden za pomocą wybranej strategii (Deep Merge / Shallow Merge / Array Concat / Array Replace). Oferuje 4 tryby rozwiązywania konfliktów, idealne do agregacji danych z wielu źródeł, warstwowania konfiguracji i scalania tłumaczeń i18n.

Powiązane Rekomendacje

Czym jest scalanie JSON (JSON Merge)?

Scalanie JSON (JSON Merge) to operacja łączenia dwóch lub więcej obiektów JSON w jeden nowy obiekt zgodnie z określonymi regułami. Występuje niezwykle często w inżynierii oprogramowania: ① łączenie JSON zwróconych przez wiele mikrousług w jedną ujednoliconą odpowiedź (agregacja w warstwie BFF); ② scalanie konfiguracji bazowej, środowiskowej i użytkownika według logiki „nakładania środowisk” w ostateczną konfigurację (Node.js config, Viper, Spring Cloud Config); ③ łączenie, nadpisywanie i uzupełnianie wielu plików tłumaczeń i18n w kompletny słownik; ④ scalanie wielu tablic danych mock w pełny zbiór danych testowych; ⑤ łączenie odpowiedzi stronicowanych API w pełny wynik.

Trudność scalania nie leży w samym „łączeniu”, ale w tym, „jak obsługiwać konflikty”. Istnieją 4 powszechne strategie rozwiązywania konfliktów: ① **Deep Merge (głębokie scalanie)**: rekursywnie wchodzi w zagnieżdżone obiekty, scalając każdy klucz oddzielnie — nadpisuje tylko w przypadku konfliktu na poziomie liści; idealne do warstwowania konfiguracji. ② **Shallow Merge (płytkie scalanie)**: scala tylko klucze najwyższego poziomu, klucze o tej samej nazwie nadpisuje w całości; najprostsza semantyka, podobna do `Object.assign`. ③ **Array Concat (konkatenacja tablic)**: wartości typu tablica są łączone w jedną długą tablicę z zachowaniem kolejności wszystkich elementów; idealne do agregacji API. ④ **Array Replace (zastąpienie tablic)**: wartości typu tablica są bezpośrednio nadpisywane przez ostatnią wprowadzoną; idealne do nadpisywania konfiguracji.

Na poziomie implementacji głębokie scalanie zazwyczaj wykorzystuje rekursję: najpierw sprawdza, czy obie strony są zwykłymi obiektami (nie tablicami, nie null), a następnie rekursywnie przetwarza każdy klucz. Gdy typy są niezgodne (np. ten sam klucz jest obiektem po jednej stronie a tablicą po drugiej), zazwyczaj stosuje się zasadę „ostatni wprowadzony wygrywa” bez konwersji typów. Narzędzie GeekFormat JSON Merge ma wbudowane wszystkie 4 powyższe strategie, które można przełączać bezpośrednio na stronie; można wkleić od 2 do N fragmentów JSON, które zostaną automatycznie scalone w kolejności, dając ujednolicony sformatowany wynik. Cały proces scalania odbywa się lokalnie w przeglądarce — oryginalne dane nie są wysyłane na żaden serwer.

Przypadki użycia

  • Scalanie odpowiedzi API z wielu mikrousług w ujednoliconą strukturę JSON dla frontendu
  • Agregacja wielowarstwowych plików konfiguracyjnych base / dev / prod i generowanie ostatecznej konfiguracji według środowiska
  • Łączenie, deduplikacja i uzupełnianie wielu plików tłumaczeń i18n według języka w kompletny słownik
  • Scalanie wielu tablic danych mock lub odpowiedzi stronicowanych API w pełny zbiór danych
  • Scalanie domyślnej konfiguracji komponentu frontendowego + konfiguracji użytkownika + zdalnej konfiguracji eksperymentów A/B
  • Scalanie plików eksportu JSON z wielu systemów źródłowych podczas migracji danych i ujednolicanie ich do formatu downstream

Jak Używać

  1. Wklej kolejno od 2 do N fragmentów JSON do scalenia w pola wejściowe po lewej stronie (domyślnie 2) lub kliknij „+”, aby dodać kolejne wejścia
  2. Wybierz strategię scalania z listy rozwijanej na pasku narzędzi: Deep Merge / Shallow Merge / Array Concat / Array Replace
  3. Kliknij przycisk „Scal”; w polu wyjściowym po prawej stronie pojawi się sformatowany wynik scalania; jeśli wystąpi błąd składni, wyświetlony zostanie konkretny numer linii i komunikat o błędzie
  4. Po sprawdzeniu poprawności wyniku kliknij „Kopiuj”, aby umieścić scalony wynik w schowku, lub „Pobierz”, aby zapisać go jako plik merged.json do dalszego formatowania, walidacji Schema lub innego przetwarzania

Funkcje

  • 4 strategie scalania: Deep Merge / Shallow Merge / Array Concat / Array Replace, przełączane jednym kliknięciem dla różnych scenariuszy biznesowych
  • Obsługa od 2 do N fragmentów JSON: domyślnie 2 pola wejściowe, przycisk „+” pozwala dynamicznie dodawać kolejne źródła JSON, elastycznie dopasowując się do agregacji z wielu źródeł
  • Rekursywne głębokie scalanie: inteligentnie obsługuje wielopoziomowe zagnieżdżone obiekty, przetwarza konflikty na poziomie liści zgodnie z wybraną strategią, zachowując wszystkie prawidłowe pola
  • Elastyczne rozwiązywanie konfliktów: konflikty na najwyższym poziomie rozwiązywane są zgodnie z wybraną strategią; konflikty w zagnieżdżonych obiektach przechodzą do głębszego scalania; konflikty tablic rozwiązywane są rozróżnieniem arrayConcat/arrayReplace
  • Ujednolicone formatowanie wyjścia: wynik scalania wyświetlany z 2-spacjowym wcięciem, ułatwiając ręczny przegląd i bezpośrednie kopiowanie do narzędzi downstream
  • Scalanie w czasie rzeczywistym: po wklejeniu kliknij „Scal”, aby natychmiast uzyskać wynik; w przypadku błędu wyświetlany jest konkretny numer linii JSON i komunikat o błędzie
  • Lokalne przetwarzanie chroni prywatność: parsowanie, scalanie i formatowanie odbywają się w całości lokalnie w przeglądarce, wprowadzone dane nie są wysyłane na żaden serwer
  • Bezproblemowa integracja z narzędziami downstream: wynik scalania można jednym kliknięciem skopiować do narzędzi formatowania JSON, walidacji Schema lub generowania kodu

Przykłady kodu

Głębokie scalanie w JavaScript za pomocą lodash.merge

javascript
// npm install lodash.merge
import merge from 'lodash.merge';

const a = { user: { name: 'Alice', age: 28 }, tags: ['admin'] };
const b = { user: { email: 'a@x.com', age: 29 }, tags: ['editor'] };

// Głębokie scalanie: zagnieżdżone obiekty scalane rekursywnie, liście nadpisywane przez ostatnią wartość
const deep = merge({}, a, b);
console.log(deep);
// => { user: { name: 'Alice', age: 29, email: 'a@x.com' }, tags: ['admin', 'editor'] }

// Płytkie scalanie: klucze najwyższego poziomu nadpisywane w całości, bez wchodzenia w zagnieżdżenia
const shallow = Object.assign({}, a, b);
console.log(shallow);
// => { user: { email: 'a@x.com', age: 29 }, tags: ['editor'] }

Głębokie scalanie w Python za pomocą mergedeep

python
# pip install mergedeep
from mergedeep import merge

a = {"user": {"name": "Alice", "age": 28}, "tags": ["admin"]}
b = {"user": {"email": "a@x.com", "age": 29}, "tags": ["editor"]}

# Głębokie scalanie
result = merge(a, b)
print(result)
# => {'user': {'name': 'Alice', 'age': 29, 'email': 'a@x.com'}, 'tags': ['admin', 'editor']}

# Uwaga: mergedeep domyślnie scala tablice, napisy/liczby nadpisuje
# Aby nadpisywać tablice, dodaj strategy='override'

Scalanie wielu JSON-ów z wiersza poleceń za pomocą jq -s

bash
# Scalanie wielu tablic JSON w jedną długą tablicę
jq -s 'add' a.json b.json c.json

# Rekursywne scalanie wielu obiektów JSON (jq 1.6+)
jq -s 'reduce .[] as $item ({}; . * $item)' a.json b.json

# Płytkie scalanie: nadpisanie kluczy z b na a
jq -s '.[0] * .[1]' a.json b.json

# Scalanie tablic z pozostawieniem tylko unikalnych pól id
jq -s '[.[].items[]] | unique_by(.id)' a.json b.json

Często Zadawane Pytania

Czy scalanie JSON i konkatenacja JSON to to samo?

Nie do końca. „Konkatenacja” zazwyczaj oznacza bezpośrednie łączenie ciągów znaków bez struktury; „scalanie” oznacza rekursywne łączenie wielu obiektów w jeden zgodnie ze strukturą JSON, z obsługą konfliktów nazw kluczy. To narzędzie wykonuje tę drugą operację — strukturalne scalanie JSON.

Jak wybrać między głębokim a płytkim scaleniem?

Płytkie scalanie (Shallow Merge): obsługuje tylko klucze najwyższego poziomu, klucze o tej samej nazwie zastępuje w całości, podobnie jak `Object.assign` — najprostsze i najbardziej bezpośrednie. Głębokie scalanie (Deep Merge): rekursywnie wchodzi w zagnieżdżone obiekty i scala każdy liść oddzielnie — bardziej inteligentne. Jeśli Twoje JSON-y dodają pola w różnych podścieżkach (np. base.user.name vs override.user.email), użyj głębokiego scalania; jeśli chcesz zastąpić cały podobiekt naraz, użyj płytkiego scalania.

Czy przy scalaniu tablic kolejność jest zachowywana, czy scalanie odbywa się po indeksie?

To narzędzie domyślnie stosuje semantykę „konkatenacji”: łączy wiele tablic w jedną długą z zachowaniem kolejności wszystkich elementów. Jeśli dwie tablice mają tę samą długość i chcesz nadpisywać element po elemencie według indeksu, przełącz się na „arrayReplace” i ręcznie opakuj tablice w strukturę obiektu.

Jak decydować, kto nadpisuje kogo w przypadku konfliktu nazw kluczy?

Decyduje kolejność wprowadzania: późniejsze JSON-y nadpisują wcześniejsze klucze o tej samej nazwie (w strategii Shallow/Array Replace — nadpisanie w całości, w Deep Merge — tylko na poziomie liści). Jeśli chcesz, aby „wcześniej wprowadzone miały pierwszeństwo”, po prostu odwróć kolejność wprowadzania.

Czy obsługiwane jest scalanie tablic JSON?

Tak. Dwa typowe scenariusze: ① wiele JSON-ów to tablice → użyj „arrayConcat”, aby połączyć je w jedną długą tablicę; ② wiele JSON-ów to obiekty, a niektóre pole jest tablicą → użyj „arrayConcat”, aby połączyć wiele tablic, lub „arrayReplace”, aby ostatnia wprowadzona tablica nadpisała poprzednie.

Czy można scalić więcej niż 2 JSON-y naraz?

Tak. Domyślnie dostępne są 2 pola wejściowe, przycisk „+” pozwala dynamicznie dodawać kolejne; wszystkie dane wejściowe są scalane kolejno od góry do dołu. Teoretycznie liczba nie jest ograniczona, ale pamięć przeglądarki ogranicza rozmiar pojedynczego fragmentu.

Jak ustalana jest kolejność kluczy po scaleniu?

Deep Merge: kolejność kluczy z pierwszego JSON-a ma pierwszeństwo, nowe klucze z drugiego JSON-a są dodawane na koniec odpowiedniego poziomu. Shallow Merge: zgodnie z kolejnością wprowadzania, wszystkie klucze pierwszego JSON-a pojawiają się pierwsze, nowe klucze kolejnych JSON-ów są dodawane na najwyższym poziomie; klucze o tej samej nazwie zachowują kolejność z pierwszego JSON-a.

Czy narzędzie zmienia typy pól?

Nie zmienia typów celowo. Jeśli w strategii Shallow/Array Replace ten sam klucz jest obiektem w jednym JSON-ie a tablicą w drugim, stosowana jest zasada „ostatni wprowadzony wygrywa” i wartość jest bezpośrednio nadpisywana bez konwersji typów. Deep Merge przechodzi w rekursję tylko wtedy, gdy „obie strony są zwykłymi obiektami”, w pozostałych przypadkach stosuje nadpisanie.

Czy wartości null są zachowywane?

Tak. null jest prawidłową wartością w JSON i to narzędzie traktuje null jako zwykłą wartość liścia: w Shallow/Array Replace później wprowadzone null nadpisuje poprzednią wartość; w Deep Merge napotkane null jest obsługiwane zgodnie z regułami nadpisywania i nie jest specjalnie pomijane.

Czy po scaleniu wyświetlane są statystyki?

Tak. W obszarze wyników wyświetlana jest liczba scalonych fragmentów JSON i całkowita liczba kluczy, co ułatwia szybkie sprawdzenie poprawności wyniku; szczegółową listę pól można zobaczyć bezpośrednio w sformatowanym wyniku po prawej stronie.

Czy narzędzie wysyła moje JSON-y na serwer?

Nie. Parsowanie, scalanie i formatowanie odbywają się w całości lokalnie w przeglądarce, dane wejściowe i pośrednie nie są wysyłane na żaden serwer. Można używać offline, co nadaje się do przetwarzania wieloźródłowych JSON-y zawierających informacje wrażliwe (np. konfiguracje środowiska produkcyjnego, wewnętrzne odpowiedzi API).

Jaka jest najlepsza kolejność użycia z narzędziami formatowania JSON i walidacji Schema?

Zalecany przepływ: ① Naprawa JSON (wyczyszczenie nieprawidłowego JSON) → ② to narzędzie Scal JSON (scalanie z wielu źródeł) → ③ Formatowanie JSON (ujednolicenie wcięć) → ④ Walidacja JSON Schema (sprawdzenie ostatecznej struktury) → ⑤ dalsze generowanie kodu (TypeScript / Java / Go itp.). Wybierz tylko potrzebne kroki.

Rozwiązywanie problemów

Komunikat „Unexpected token” lub „Invalid JSON” podczas scalania

Przyczyna: co najmniej jedno pole wejściowe zawiera nieprawidłowy JSON. Rozwiązanie: najpierw wklej błędny JSON do narzędzia „Naprawa JSON”, aby go wyczyścić (automatycznie obsługuje końcowe przecinki, pojedyncze cudzysłowy, niecytowane klucze itp.), a następnie wróć do tego narzędzia i scal; lub sprawdź, czy nie brakuje zewnętrznych nawiasów klamrowych / kwadratowych.

Niektóre pola nie pojawiły się po scaleniu

Przyczyna: w strategii Shallow/Array Replace klucze o tej samej nazwie zostały w całości nadpisane przez późniejszy wejściowy JSON; w Deep Merge pola o wartości null również nadpisują wcześniejsze obiekty. Rozwiązanie: przełącz strategię na „Deep Merge” i sprawdź warstwa po warstwie; jeśli potwierdzisz, że późniejsze null nadpisuje wartość, usuń pole null z późniejszego JSON-a lub zastąp je wartością zastępczą.

Tablice zostały nadpisane zamiast połączone

Przyczyna: bieżąca strategia to „Shallow Merge” lub „Array Replace”. Rozwiązanie: przełącz się na „Array Concat (konkatenacja tablic)” na liście rozwijanej paska narzędzi; lub ręcznie połącz dwie tablice w jedną przed scaleniem.

W wyniku głębokiego scalania obiekt stał się tablicą lub odwrotnie

Przyczyna: dwa JSON-y mają niezgodne typy „obiekt vs tablica” na tej samej ścieżce klucza; głębokie scalanie przy niezgodności typów stosuje zasadę „ostatni wprowadzony wygrywa”. Rozwiązanie: ujednolic typy po obu stronach (zmień oba na obiekty lub oba na tablice) lub przełącz się na strategię Shallow/Array Replace, aby jawnie określić semantykę.

Kolejność kluczy po scaleniu jest pomieszana

Przyczyna: nowe klucze z drugiego JSON-a są dopisywane za pierwszym JSON-em, a przeglądarka/parser automatycznie sortuje klucze będące czystymi liczbami całkowitymi według wartości liczbowej. Rozwiązanie: najpierw ujednolic kolejność kluczy we wszystkich wejściowych JSON-ach za pomocą narzędzia „Sortowanie JSON”, a następnie scal; lub posortuj ponownie przed użyciem wyniku.

Zawieszanie się przy scalaniu dużych plików (10 MB+)

Przyczyna: jednorazowe parsowanie JSON z wielu dużych fragmentów tekstu w przeglądarce zużywa dużo pamięci. Rozwiązanie: kontroluj rozmiar każdego wejścia na poziomie 1-2 MB; do przetwarzania bardzo dużych plików użyj lokalnych skryptów Node.js (lodash.merge) lub Python (mergedeep); po przetworzeniu użyj tego narzędzia do małej weryfikacji.

Słownik

JSON Merge
Operacja łączenia dwóch lub więcej obiektów JSON w jeden nowy obiekt zgodnie z określonymi regułami. Główna trudność to „strategia rozwiązywania konfliktów przy powtarzających się nazwach kluczy”.
Deep Merge / Głębokie scalanie
Strategia rekursywnego wchodzenia w zagnieżdżone obiekty i scalania każdego węzła-liścia oddzielnie; gdy obie strony są zwykłymi obiektami, następuje rekursja, w przeciwnym razie stosuje się nadpisanie.
Shallow Merge / Płytkie scalanie
Strategia scalania tylko kluczy najwyższego poziomu, gdzie klucze o tej samej nazwie są nadpisywane w całości; w JS odpowiada `Object.assign({}, a, b)`.
Array Concat / Konkatenacja tablic
Jedna ze strategii scalania tablic: łączy wiele tablic w jedną długą z zachowaniem kolejności wszystkich elementów; często używana do agregacji odpowiedzi API.
Array Replace / Zastąpienie tablic
Jedna ze strategii scalania tablic: tablica o tej samej nazwie jest w całości nadpisywana przez ostatnią wprowadzoną; często używana do nadpisywania konfiguracji.
Object.assign
Wbudowana metoda JavaScript, która kopiuje płytko wszystkie wyliczalne własności własne z jednego lub więcej obiektów źródłowych do obiektu docelowego; de facto standardowa implementacja płytkiego scalania.
lodash.merge
Funkcja głębokiego scalania dostarczana przez bibliotekę Lodash, najczęściej używana implementacja deep merge w ekosystemie Node.js; scala tablice zamiast je nadpisywać.
mergedeep (Python)
Biblioteka głębokiego scalania w ekosystemie Pythona, instalowana przez pip install mergedeep; obsługuje parametr strategy kontrolujący zachowanie scalania lub nadpisywania tablic.
jq -s 'add'
Polecenie jq sumujące wiele tablic JSON w jedną tablicę; do scalania wielu obiektów JSON należy użyć `reduce .[] as $item ({}; . * $item)`.
BFF (Backend for Frontend)
Warstwa agregacji w architekturze mikrousług, znajdująca się między frontendem a usługami backendowymi; często wymaga scalenia odpowiedzi JSON z wielu usług w ujednoliconą odpowiedź — klasyczny scenariusz użycia scalania JSON.

Porównanie 4 strategii scalania JSON

StrategiaZakres działaniaObsługa tablicTypowy scenariusz
Deep Merge (głębokie)Rekursywnie wszystkie zagnieżdżone poziomyWedług wybranego arrayConcat/arrayReplaceWarstwowanie konfiguracji wielu środowisk, scalanie słowników i18n
Shallow Merge (płytkie)Tylko najwyższy poziomNadpisanie w całościProste nadpisanie w stylu Object.assign
Array Concat (konkatenacja)Najwyższy poziomKonkatenacja w nową tablicęAgregacja stronicowanych API, scalanie danych mock
Array Replace (zastąpienie)Najwyższy poziomOstatnia wprowadzona wygrywaNadpisywanie konfiguracji Feature Flag

Tabela porównawcza popularnych implementacji scalania JSON

Implementacja/bibliotekaJęzykDomyślne zachowanieUwagi
Object.assignJavaScriptPłytkie scalanieStandardowa biblioteka ES2015; od ES2017 można używać `Object.assign({}, a, b)`
{ ...a, ...b }JavaScriptPłytkie scalanieOperator spread, bardziej zwięzła składnia
lodash.mergeJavaScriptGłębokie scalanieScala tablice zamiast nadpisywać, npm install lodash.merge
mergedeepPythonGłębokie scalaniestrategy='override' zmienia scalanie tablic na nadpisywanie
deepmerge (Python)PythonGłębokie scalanieInna popularna implementacja, pip install deepmerge
jq -s 'add'ShellSumowanie tablicScalanie obiektów wymaga `reduce .[] as $i ({}; . * $i)`

Authoritative References