JSON Formatter i walidator

Acrafto Team Programiści
Zaktualizowano
Czekam na dane. Wklej JSON powyżej lub upuść plik .json.

Wklej dowolny JSON do pola powyżej, a ten JSON formatter i walidator sprawdzi go już podczas pisania. Poprawne dane zostaną sformatowane z wybranym wcięciem albo zminifikowane do jednego wiersza. Przy błędnych danych dostajesz dokładny komunikat z numerem wiersza i kolumny, podświetlony fragment, a przy typowych pomyłkach także naprawę jednym kliknięciem. Wszystko działa w Twojej przeglądarce, więc odpowiedzi API, pliki konfiguracyjne i eksporty nigdy nie opuszczają Twojego komputera.

Co robi ten JSON formatter

  • Formatowanie JSON z wcięciem 2 spacji, 4 spacji lub tabulatorami. Wynik zachowuje oryginalną kolejność kluczy, chyba że zaznaczysz Sortuj klucze.
  • Minifikacja JSON przez usunięcie wszystkich spacji i podziałów wierszy. Informacja o rozmiarze pod wynikiem pokazuje, ile bajtów udało się oszczędzić.
  • Walidacja JSON na żywo zgodnie z RFC 8259, aktualnym standardem JSON. Wiersz statusu zmienia kolor na zielony w chwili, gdy dokument jest poprawny.
  • Automatyczna naprawa typowych błędów: końcowe przecinki, pojedyncze cudzysłowy, klucze bez cudzysłowów, komentarze, wartości w stylu Pythona True, None i NaN oraz liczby takie jak .5 czy +1.
  • Wczytywanie plików przyciskiem Otwórz plik albo przez upuszczenie pliku .json na pole wejściowe. Wynik możesz potem pobrać lub przenieść z powrotem do pola wejściowego, żeby go dalej obrobić.

Dlaczego komunikat o błędzie znaczy więcej niż czerwony kolor

Większość walidatorów online mówi tylko, że coś jest nie tak. Przeglądarki nie są dużo lepsze: JSON.parse w Chrome zgłasza Unexpected token } in JSON at position 148, Firefox pisze expected property name or '}', i żaden z nich nie mówi, w który wiersz trzeba spojrzeć. To narzędzie ma własny parser, który zapamiętuje, gdzie zaczyna się każdy token. Gdy parser się zatrzyma, dostajesz numer wiersza i kolumny, wycinek tego wiersza z daszkiem ^ pod błędnym znakiem oraz podpowiedź prostym językiem, na przykład Prawdopodobnie brakuje przecinka między dwiema właściwościami. Przycisk Przejdź do błędu ustawia kursor dokładnie w tym miejscu pola wejściowego.

Najczęstsze błędy, które widzimy we wklejanych dokumentach:

Dane wejścioweProblemPoprawny JSON
{'name': 'Ada'}pojedyncze cudzysłowy{"name": "Ada"}
{name: "Ada"}klucz bez cudzysłowów{"name": "Ada"}
[1, 2, 3,]końcowy przecinek[1, 2, 3]
{"a": 1 "b": 2}brakujący przecinek{"a": 1, "b": 2}
{"ok": True}literał z Pythona{"ok": true}
{"x": 007}wiodące zero{"x": 7} lub {"x": "007"}
// commentkomentarzniedozwolony w JSON

Przycisk Napraw za mnie naprawia wszystkie te błędy oprócz brakującego przecinka i wiodącego zera. Naprawa jest celowo ostrożna: nigdy nie zgaduje, gdzie powinien stać brakujący przecinek, bo wstawienie go w złym miejscu zmieniłoby znaczenie danych, a 007 może oznaczać liczbę 7 albo kod. W takich przypadkach zamiast poprawki dostajesz dokładną pozycję błędu.

Duże liczby, kolejność kluczy i inne rzeczy, które zwykle się psują

Wiele formatterów działa tak, że wywołuje JSON.parse, a potem JSON.stringify. Taka podróż w obie strony po cichu uszkadza dane. Identyfikator z Twittera albo Snowflake, na przykład 1234567890123456789, przekracza limit 2^53 dla liczb w JavaScript i wraca jako 1234567890123456800. Wartość 1.0 zmienia się w 1, a 1e3 w 1000. Ten formatter nigdy nie zamienia liczb na zmiennoprzecinkowe. Kopiuje każdy literał dokładnie tak, jak został zapisany, więc wynik jest wiernym przeformatowaniem danych wejściowych, a nie ich nową interpretacją. To samo dotyczy sekwencji ucieczki w ciągach znaków: "\u00e9" zostaje "\u00e9" i nie zamienia się w "é".

Kolejność kluczy również zostaje zachowana. Specyfikacja JSON mówi, że elementy obiektu nie mają ustalonej kolejności, ale pliki konfiguracyjne, dane testowe i przeglądy kodu czyta się znacznie lepiej, gdy kolejność jest stała. Jeśli wolisz postać kanoniczną, na przykład żeby porównać dwie odpowiedzi API w narzędziu diff, włącz Sortuj klucze, a oba dokumenty wypiszą swoje właściwości alfabetycznie na każdym poziomie zagnieżdżenia.

Formatowanie JSON a minifikacja JSON: kiedy co wybrać

Sformatowany JSON jest dla ludzi. Używaj go, gdy przeglądasz odpowiedź API, piszesz package.json, tsconfig.json albo dokument OpenAPI lub gdy trzymasz dane testowe w repozytorium, w którym diffy powinny pokazywać jedną zmianę na wiersz. Dwie spacje to konwencja w ekosystemie JavaScript, cztery spacje są popularne w projektach w Pythonie i .NET, a tabulatory pozwalają każdemu czytelnikowi ustawić własną szerokość wcięcia.

Zminifikowany JSON jest dla maszyn. Białe znaki stanowią zwykle 20 do 40 procent sformatowanego dokumentu, więc ich usunięcie zmniejsza dane wysyłane do przeglądarek, wartości zapisywane w Redis lub w kolumnie bazy danych oraz atrybuty data-* osadzone w HTML. Kompresja gzip niweluje część tej różnicy, ale wersja zminifikowana i tak kompresuje się do mniejszego rozmiaru. Informacja o rozmiarze pod wynikiem pokazuje dokładną różnicę dla Twojego dokumentu.

Praca z JSON w terminalu i w edytorach

Przy plikach, które przetwarzasz regularnie, narzędzie wiersza poleceń jest szybsze niż jakakolwiek strona internetowa. jq . file.json formatuje, jq -c . file.json minifikuje, a python -m json.tool file.json działa wszędzie tam, gdzie jest zainstalowany Python. Visual Studio Code formatuje JSON skrótem Shift+Alt+F i waliduje go względem schematu, gdy dodasz właściwość $schema. Ta strona jest na pozostałe sytuacje: odpowiedź skopiowaną z zakładki Sieć w narzędziach deweloperskich, wiersz z logu, fragment konfiguracji z wiki albo szybkie sprawdzenie na komputerze, na którym nie możesz niczego zainstalować.

Powiązane narzędzia na tej stronie: koder i dekoder Base64 dekoduje część z danymi (payload) tokenu JWT, czyli JSON zakodowany w Base64url. Konwerter Unix timestamp zamienia liczby createdAt, które znajdziesz w większości odpowiedzi API, na czytelne daty, a dekoder UUID pokazuje wersję i sygnaturę czasową identyfikatorów w Twoich danych. Więcej przydatnych narzędzi znajdziesz w kategorii narzędzia dla programistów.

Często zadawane pytania

Czy mój JSON jest wysyłany na serwer? Nie. Parsowanie, formatowanie i naprawa działają w całości w Twojej przeglądarce, w JavaScript. Po załadowaniu strony możesz odłączyć internet, a narzędzie nadal będzie działać. Nic nie jest logowane ani zapisywane.
Dlaczego walidator odrzuca komentarze, skoro mój edytor je akceptuje? Komentarze celowo usunął z JSON jego autor, Douglas Crockford, żeby format nie był wykorzystywany do przekazywania dyrektyw parserowi. Pliki takie jak tsconfig.json czy .vscode/settings.json to formalnie JSONC, czyli nadzbiór JSON obsługiwany przez edytory. Ścisłe parsery w API, bazach danych i większości języków programowania takie pliki odrzucają. Przycisk naprawy usuwa komentarze, więc wynik jest prawidłowy wszędzie.
Czy mogę sformatować JSON Lines albo kilka obiektów naraz? Dokument JSON zawiera dokładnie jedną wartość. Jeśli wkleisz kilka obiektów oddzielonych przecinkami lub podziałami wierszy, walidator zatrzyma się na pierwszej nadmiarowej wartości. Ujmij je w nawiasy kwadratowe, żeby powstała tablica, i dopiero wtedy formatuj. Przycisk naprawy nie robi tego automatycznie, bo nie może wiedzieć, czy dane miały być jednym dokumentem.
Jaki jest maksymalny rozmiar? Nie ma stałego limitu. Dokumenty o rozmiarze kilku megabajtów formatują się na laptopie w znacznie krótszym czasie niż sekunda. Powyżej około 400 kB podświetlanie składni jest wyłączane, żeby strona działała płynnie, ale kopiowanie i pobieranie nadal działają.
Czy sortowanie kluczy zmienia dane? Nie. Obiekty w JSON z definicji nie mają ustalonej kolejności (zobacz artykuł o JSON w Wikipedii), więc parser odczytuje posortowany i oryginalny dokument jako tę samą wartość. Tablice nigdy nie są przestawiane, bo ich kolejność jest częścią danych.
Jak przygotować JSON do osadzenia w ciągu znaków? Najpierw zminifikuj dane, a potem poprzedź każdy ukośnik odwrotny i każdy podwójny cudzysłów ukośnikiem odwrotnym. Wiele języków robi to od razu: JSON.stringify(JSON.stringify(obj)) w JavaScript albo json.dumps(json.dumps(obj)) w Pythonie zwraca ciąg JSON, który zawiera tekst JSON.

Byłbym wdzięczny, gdybyś udostępnił te strony znajomym, dodał je do zakładek lub linkował do nich. Dziękuję! 🙏