Sortowanie JSON

Uporządkuj klucze obiektów JSON i elementy tablic, aby dane były łatwiejsze do czytania, porównywania i zapisywania w spójnej formie. Wszystko działa lokalnie w przeglądarce.

Powiązane Rekomendacje

Czym jest sortowanie JSON?

Sortowanie JSON polega na ponownym ułożeniu kluczy obiektu według określonego porządku albo uporządkowaniu elementów tablicy według wartości. Nie zmienia to samych danych ani ich typów, a jedynie ich kolejność.

Taka normalizacja pomaga ograniczyć szum w Git Diff, ujednolicić pliki konfiguracyjne, przygotować dane przed JSON Diff oraz ustabilizować klucze cache w odpowiedziach API. Ten sam JSON nie wygląda wtedy jak niepotrzebna zmiana tylko z powodu innej kolejności kluczy.

Narzędzie GeekFormat oferuje dwa tryby: sortowanie kluczy i sortowanie tablic, a także przełączanie rosnąco/malejąco oraz sortowanie rekurencyjne. Dane nie opuszczają przeglądarki.

Przypadki użycia

  • Ujednolicenie kolejności kluczy w package.json, tsconfig.json i innych konfiguracjach
  • Posortowanie obu JSON-ów przed porównaniem, aby usunąć fałszywe różnice wynikające wyłącznie z kolejności
  • Ustabilizowanie kolejności kluczy w odpowiedziach API dla cache, hashy i snapshotów
  • Uporządkowanie dużych plików JSON przed code review lub audytem konfiguracji
  • Przygotowanie wyniku po merge albo repair przed dalszą walidacją

Jak Używać

  1. Wklej JSON po lewej stronie, załaduj przykład albo importuj plik .json
  2. Wybierz tryb sortowania kluczy lub tablicy, a następnie ustaw kierunek i rekurencję
  3. Uruchom sortowanie i sprawdź wynik po prawej stronie
  4. Skopiuj rezultat albo pobierz go jako plik sorted.json

Funkcje

  • Dwa tryby: sortowanie kluczy obiektów i sortowanie elementów tablic
  • Obsługa rekurencji: porządek jest wyrównywany także wewnątrz obiektów zagnieżdżonych
  • Rosnąco i malejąco: łatwe przełączanie kierunku sortowania
  • Bez zmiany struktury: wartości i typy pozostają bez zmian, zmienia się tylko kolejność
  • Lokalne przetwarzanie: JSON nie jest wysyłany na serwer
  • Dobra baza do dalszej pracy: wynik można od razu przekazać do JSON Diff, Repair i Format

Przykłady kodu

Rekurencyjne sortowanie kluczy w JavaScript

javascript
// Rekurencyjnie sortuje klucze i zwraca nowy obiekt
function sortKeysDeep(value) {
  if (Array.isArray(value)) return value.map(sortKeysDeep);
  if (value !== null && typeof value === 'object') {
    return Object.keys(value)
      .sort((a, b) => a.localeCompare(b))
      .reduce((acc, k) => {
        acc[k] = sortKeysDeep(value[k]);
        return acc;
      }, {});
  }
  return value;
}

const data = { zoo: { animals: ['zebra', 'elephant'] }, alpha: 1, beta: 2 };
console.log(JSON.stringify(sortKeysDeep(data), null, 2));

Użycie sort_keys=True w Pythonie

python
import json

data = {"zoo": {"animals": ["zebra", "elephant"]}, "alpha": 1, "beta": 2}

print(json.dumps(data, indent=2, sort_keys=True, ensure_ascii=False))

arr = [3, 1, 4, 1, 5]
print(sorted(arr))
print(sorted(arr, reverse=True))

Sortowanie JSON przez jq

bash
# Rekurencyjnie posortuj klucze
jq -S '.' data.json

# Posortuj elementy tablicy
jq 'sort' data.json

# Sortowanie po konkretnym polu
jq 'sort_by(.age)' data.json

Często Zadawane Pytania

Czym różni się sortowanie JSON od formatowania JSON?

Formatowanie zmienia tylko wcięcia i układ tekstu, a sortowanie JSON przestawia klucze oraz elementy tablic. Użycie obu narzędzi razem daje jednolity porządek i czytelny wygląd.

Czy po sortowaniu JSON będzie większy?

Prawie nie. Zmienia się tylko kolejność kluczy i elementów, a nie ilość danych.

Czy zmieniają się wartości lub typy?

Nie. `null`, liczby, stringi, boole, obiekty i tablice pozostają dokładnie takie same.

Co oznacza sortowanie rekurencyjne?

To sortowanie stosowane nie tylko do obiektu na najwyższym poziomie, ale też do wszystkich obiektów wewnątrz. Przy konfiguracjach i odpowiedziach API zwykle warto mieć je włączone.

Dlaczego klucze liczbowe trafiają na początek?

W JavaScript klucze wyglądające jak liczby całkowite są iterowane w porządku numerycznym. To zachowanie specyfikacji, nie błąd narzędzia.

Jak sortowane są obiekty znajdujące się w tablicy?

Tryb tablicy porównuje elementy w sposób ogólny na podstawie ich reprezentacji tekstowej. Jeśli potrzebujesz sortowania po konkretnym polu, lepiej użyć `sort_by(.field)` albo własnej funkcji.

Czy JSON jest wysyłany na serwer?

Nie. Wszystkie operacje odbywają się lokalnie w przeglądarce, więc narzędzie nadaje się także do danych wrażliwych.

W jakiej kolejności łączyć to z JSON Diff lub Schema?

Najwygodniej zwykle: JSON Repair → sortowanie JSON → JSON Diff / formatowanie → walidacja Schema. Najpierw wyrównujesz kolejność, potem ograniczasz szum różnic.

Rozwiązywanie problemów

Pojawia się błąd Invalid JSON

Wejściowy JSON prawdopodobnie ma błąd składni. Najpierw sprawdź go w narzędziu JSON Repair lub JSON Format.

Klucze liczbowe zawsze są na górze

Tak działa JavaScript dla kluczy podobnych do liczb całkowitych. To zachowanie platformy, a nie błąd sortowania.

Obiekty w tablicy nie układają się tak, jak oczekuję

Tryb tablicy nie zna znaczenia pól biznesowych i porównuje elementy ogólnie. Dla pól takich jak `price` czy `date` lepiej użyć `sort_by`.

Obiekty zagnieżdżone nie są sortowane

Sprawdź, czy sortowanie rekurencyjne jest włączone. Bez niego przetwarzany jest tylko najwyższy poziom.

Bardzo duży JSON spowalnia przeglądarkę

Duże pliki warto wcześniej obrobić lokalnie przez `jq`, Python lub Node.js, a w przeglądarce tylko sprawdzić wynik końcowy.

Słownik

JSON Sort
Operacja zmieniająca tylko kolejność kluczy lub elementów tablicy bez ingerencji w wartości i typy.
Recursive Sort
Sortowanie stosowane nie tylko do najwyższego poziomu, ale też do wszystkich obiektów zagnieżdżonych.
Ascending / Descending
Rosnąco oznacza A-Z lub od mniejszych do większych wartości, malejąco działa odwrotnie.
Canonical Form
Ujednolicona reprezentacja JSON wygodna do porównań, cache i hashy.
Git Diff Noise
Zbędne różnice wynikające z kolejności lub formatowania, a nie z realnej zmiany danych.
localeCompare
Mechanizm porównywania łańcuchów w JavaScript, często używany do porządkowania nazw kluczy.

Najczęstsze zastosowania sortowania JSON

ScenariuszCo sortowaćPolecana metodaNarzędzie
Mniej szumu w Git DiffKlucze obiektuRekurencyjne sortowanie kluczyTo narzędzie / jq -S
Normalizacja konfiguracjiKlucze obiektuRosnąco + rekurencjaTo narzędzie
Stabilny klucz cache APIKlucze obiektuSortowanie przed stringifyTo narzędzie / kod
Szybkie uporządkowanie tablicyElementy tablicyTryb tablicyTo narzędzie

Sortowanie JSON a diff i merge

NarzędzieCelCo porządkujeCo dalej
Sortowanie JSONUjednolicenie kolejnościKlucze / tabliceDiff, formatowanie
JSON DiffPorównanie zmianBrakNajlepiej po sortowaniu
JSON MergeScalanie źródełOpcjonalnie po mergeSortowanie po scaleniu
JSON RepairNaprawa niepoprawnego JSONBrakSortowanie po naprawie

Authoritative References