JSON formatter - formatowanie i walidacja

Wklej JSON, a narzędzie automatycznie go sformatuje albo wskaże wiersz i kolumnę z błędem.

Wszystko liczy się w Twojej przeglądarce - wklejony JSON nie opuszcza tego urządzenia.

Wklej JSON
Wcięcie

Widok wyniku

Wklej JSON i kliknij „Formatuj”. Sprawdzanie poprawności działa też na bieżąco.
Wynik
Wynik pojawi się tutaj.
Statystyki dokumentu
0Klucze
0Głębokość
0Wartości
0 BRozmiar

Głębokość liczymy od korzenia. Zagnieżdżenie powyżej dziesięciu poziomów zwykle oznacza, że strukturę warto rozbić na mniejsze dokumenty.

Wykryte problemy

Sprawdzamy typowe odstępstwa od standardu: przecinek przed nawiasem zamykającym, apostrofy zamiast cudzysłowów, klucze bez cudzysłowów, komentarze i niedomknięte nawiasy.

Jak używać

  1. Wklej surowy JSON w pole na górze. Poprawność sprawdzamy na bieżąco, więc czerwony komunikat pojawi się, zanim cokolwiek klikniesz.
  2. Kliknij „Formatuj”, żeby rozłożyć dokument na wiersze z wcięciami, albo „Minifikuj”, żeby usunąć zbędne białe znaki i zmieścić całość w jednej linii.
  3. Wcięcie ustaw na dwie spacje, cztery spacje albo tabulator. Ustawienie zapamiętujemy w przeglądarce na kolejną wizytę.
  4. Jeśli JSON zawiera błąd, pod komunikatem pokażemy fragment z zaznaczonym miejscem, numerem wiersza i kolumny. Przy typowych pomyłkach pojawi się przycisk „Spróbuj naprawić automatycznie”.
  5. Przełącznik „Widok wyniku” zmienia sposób prezentacji na kolorowany tekst, rozwijane drzewo albo tabelę CSV, jeśli dokument jest płaską tablicą obiektów.
  6. Użyj przycisku „Sortuj klucze”, żeby uporządkować wszystkie obiekty alfabetycznie. To najprostszy sposób na porównanie dwóch dokumentów różniących się tylko kolejnością pól.

Wskazówki

  • Numer wiersza i kolumny wyliczamy z pozycji znaku podanej przez przeglądarkę w komunikacie błędu. Różne przeglądarki formułują ten komunikat inaczej, dlatego rozpoznajemy kilka jego odmian.
  • JSON nie dopuszcza komentarzy, przecinka przed nawiasem zamykającym ani apostrofów jako cudzysłowów, mimo że wszystkie trzy rzeczy są poprawne w JavaScripcie. To najczęstsze źródło błędów przy ręcznym pisaniu pliku konfiguracyjnego.
  • Konwersja do CSV działa dla tablicy obiektów o prostych wartościach. Zagnieżdżone obiekty i tablice wypisujemy jako tekst JSON w komórce, bo CSV nie ma sposobu na ich zapisanie.
  • Liczby w JSON nie mają zdefiniowanej precyzji, ale JSON.parse zamienia je na liczby zmiennoprzecinkowe. Identyfikatory dłuższe niż 15 cyfr mogą po sformatowaniu wyglądać inaczej, więc lepiej przesyłać je jako tekst.
  • Kolorowanie składni robimy własnym, prostym parserem tokenów. Nie ładujemy żadnej biblioteki z zewnątrz, więc strona działa też przy zablokowanych skryptach innych firm.

Chcesz porównać dwa dokumenty linia po linii? Skorzystaj z porównywarki tekstów. Potrzebujesz odkodować treść tokena JWT? Zacznij od dekodera Base64.

Co JSON dopuszcza, a czego nie

JSON jest celowo ubogi. Standard ECMA-404 opisuje sześć rodzajów wartości: obiekt, tablicę, tekst, liczbę, wartość logiczną i null. Nazwy pól wymagają cudzysłowów prostych, więc pojedyncze cudzysłowy zamiast podwójnych psują dokument, choć w JavaScripcie zapis apostrofami uchodzi płazem. Po ostatnim elemencie tablicy lub obiektu nie może stać przecinek. Komentarzy nie ma w ogóle, mimo że wiele edytorów je toleruje.

Te ograniczenia są źródłem większości błędów w plikach pisanych ręcznie. Formaty konfiguracyjne oparte na JSON dopuszczają czasem rozszerzenia (JSON5 z komentarzami i kluczami bez cudzysłowów, JSONC w edytorach Microsoftu), ale zwykły JSON.parse odrzuci taki plik bez litości. JSON formatter na tej stronie zgłosi wtedy błąd i zaproponuje usunięcie odstępstw, żeby dokument dało się sparsować.

Jak czytać komunikat o błędzie

Przeglądarka zgłasza błąd parsowania w postaci pozycji znaku, na przykład „Unexpected token } in JSON at position 118”. Sama pozycja jest mało czytelna w pliku mającym kilkaset wierszy, dlatego przeliczamy ją na numer wiersza i kolumny, a następnie pokazujemy trzy sąsiednie wiersze z zaznaczonym znakiem.

Parser ma przy tym pułapkę, o której łatwo zapomnieć w trakcie szukania literówki. Zgłasza błąd tam, gdzie zauważył problem, a nie tam, gdzie go popełniono. Brakujący przecinek między dwoma polami zostanie zgłoszony na początku drugiego pola, a niedomknięty cudzysłów dopiero na końcu pliku. Jeśli wskazane miejsce wygląda niewinnie, sprawdź kilka linii wyżej.

Formatowanie i minifikacja JSON, sortowanie kluczy

Formatowanie rozkłada dokument na linie, dodaje wcięcia i nadaje mu czytelną postać, przez co zagnieżdżenie widać na pierwszy rzut oka. Minifikacja idzie w drugą stronę i zostawia ciąg JSON pozbawiony białych znaków spoza tekstów, zamknięty w jednej linii. Dla typowego dokumentu API oszczędność sięga 20-30% objętości, choć przy włączonej kompresji gzip realna różnica w transmisji jest znacznie mniejsza.

Sortowanie kluczy to sztuczka przydatna przy porównywaniu. Standard nie narzuca kolejności pól w obiekcie, więc dwa dokumenty o identycznej treści mogą różnić się układem. Po alfabetycznym uporządkowaniu obu i sformatowaniu tym samym wcięciem zwykły diff pokaże wyłącznie realne różnice.

Znaki specjalne, escape i polskie litery

Wewnątrz tekstu JSON wymaga escapowania kilku znaków. Cudzysłów prosty zapisuje się jako \", ukośnik wsteczny podwaja się, a znak nowej linii ma postać \n. Dosłowny podział linii w środku wartości tekstowej jest błędem składni, mimo że edytory chętnie go wstawiają przy zawijaniu długiego napisu.

Polskie znaki nie wymagają escapowania, bo JSON zapisuje się w UTF-8. Spotyka się jednak dokumenty, w których każda litera spoza ASCII ma postać \u0105, i tak zachowują się starsze biblioteki serwerowe. Po sformatowaniu takie sekwencje wracają do zwykłych liter, bo narzędzie najpierw parsuje dokument, a potem zapisuje go od nowa.

Kiedy da się zamienić JSON na CSV

CSV to tabela o wierszach i kolumnach jednakowej struktury. JSON jest drzewem, więc konwersja ma sens tylko wtedy, gdy dokument jest tablicą obiektów o podobnym zestawie pól - na przykład listą zamówień albo wynikiem zapytania do bazy. Kolumny zbieramy z sumy wszystkich kluczy, a brakujące wartości zostawiamy puste.

Zagnieżdżone struktury są problemem, którego CSV nie rozwiązuje. Wypisujemy je w komórce jako tekst JSON. Taki zapis zachowuje informację, ale nie ułatwia analizy. W polskiej wersji arkuszy kalkulacyjnych domyślnym separatorem jest średnik, dlatego to on jest tutaj ustawiony jako domyślny, a znacznik BOM na początku pliku sprawia, że Excel poprawnie rozpozna polskie znaki.

Gdzie w codziennej pracy pojawia się JSON

Plik konfiguracyjny w repozytorium, odpowiedzi API z serwera testowego, eksport z bazy i log aplikacji trafiają dziś do tego samego formatu, więc programiści oglądają JSON kilkanaście razy dziennie, najczęściej w postaci zminifikowanej, czyli jako jedną długą linię bez spacji. W takiej postaci gołym okiem nie widać ani struktury dokumentu, ani miejsca błędu, więc formatowanie JSON jest pierwszą czynnością, zanim w ogóle zacznie się czytać dane.

Osobny przypadek to logi w formacie JSONL, w których każda linia jest samodzielnym dokumentem. Całego takiego pliku JSON.parse nie przyjmie, więc do formattera wklej pojedynczą linię. Tak samo wyglądają strumieniowe eksporty z hurtowni danych.

Pliki konfiguracyjne mają jeszcze jedną cechę. Powstają ręcznie, a ręczne pisanie kończy się literówką znacznie częściej niż generowanie dokumentu z kodu, dlatego walidacji używa się głównie do plików konfiguracyjnych z repozytorium, takich jak package.json czy composer.json.

Co dzieje się z danymi wklejonymi do formattera

Dokumenty JSON, które ktoś wkleja do narzędzia diagnostycznego, to zwykle odpowiedzi API z produkcyjnego serwera, a w nich siedzą dane klientów, tokeny sesji i klucze do zewnętrznych usług. Wysyłanie ich do losowego serwisu w sieci jest wyciekiem, nawet jeśli serwis obiecuje, że nic nie zapisuje.

Formatter działa w całości w przeglądarce, od parsowania po kolorowanie i konwersję do CSV. Możesz otworzyć zakładkę „Sieć” w narzędziach deweloperskich, wkleić dokument i przekonać się, że nie wychodzi żadne zapytanie. Pobrany plik też powstaje w pamięci przeglądarki.

Najczęstsze pytania

Czy mój JSON trafia na Wasz serwer?

Nie, dokument zostaje na Twoim urządzeniu. Cała obróbka odbywa się w przeglądarce, w kodzie JavaScript wczytanym razem ze stroną. Nie wysyłamy go nigdzie, nie zapisujemy i nie mamy do niego dostępu. Jeśli chcesz się upewnić, otwórz zakładkę „Sieć” w narzędziach deweloperskich. Po wklejeniu dokumentu nie pojawi się tam żadne nowe zapytanie.

Dlaczego mój plik konfiguracyjny nie przechodzi walidacji?

Zwykle winna jest jedna z trzech rzeczy: przecinek stoi przed nawiasem zamykającym, teksty mają pojedyncze cudzysłowy zamiast podwójnych albo plik zawiera komentarze. Wszystkie trzy są poprawne w JavaScripcie i w formacie JSON5, ale nie w zwykłym JSON. Kliknij „Spróbuj naprawić automatycznie”, a usuniemy te odstępstwa i pokażemy sformatowany JSON.

Co robi przycisk „Sortuj klucze”?

Porządkuje alfabetycznie nazwy pól we wszystkich obiektach, na każdym poziomie zagnieżdżenia. Kolejność elementów w tablicach pozostaje bez zmian, bo w tablicy kolejność niesie znaczenie. Najczęstsze zastosowanie to przygotowanie dwóch dokumentów do porównania.

Czy narzędzie poradzi sobie z dużym plikiem?

Pliki JSON do kilku megabajtów formatują się w ułamku sekundy. Przy większych zaczyna przeszkadzać nie samo parsowanie, tylko wyświetlenie kolorowanego wyniku, bo przeglądarka musi utworzyć dziesiątki tysięcy elementów. Dlatego kolorowanie wyłączamy powyżej miliona znaków i pokazujemy zwykły tekst.

Dlaczego długie liczby zmieniają się po sformatowaniu?

Bo JSON.parse zamienia każdą liczbę na typ zmiennoprzecinkowy podwójnej precyzji, który dokładnie odwzorowuje liczby całkowite tylko do około 9 · 10¹⁵. Identyfikator o 19 cyfrach zostanie zaokrąglony. To ograniczenie samego JavaScriptu, nie naszego narzędzia - dlatego długie identyfikatory przesyła się w JSON jako tekst.

Czy mogę przekonwertować CSV z powrotem na JSON?

To narzędzie robi tylko konwersję w jedną stronę. Kierunek odwrotny wymaga rozstrzygnięcia rzeczy, których CSV nie zapisuje, czyli typów kolumn, wartości pustych i sposobu zapisu liczb dziesiętnych. Zaplanowaliśmy to jako osobne narzędzie, żeby nie chować takich decyzji za jednym przyciskiem.

Czym różni się walidacja składni od sprawdzenia zgodności z JSON Schema?

Walidacja w tym narzędziu sprawdza składnię, czyli to, czy dokument w ogóle daje się sparsować zgodnie z ECMA-404. JSON Schema to osobny standard, który opisuje oczekiwaną strukturę dokumentu, na przykład że pole wiek musi być liczbą całkowitą, a pole email jest wymagane. Poprawny składniowo JSON może więc nie przejść walidacji schematem. Sprawdzania zgodności ze schematem tutaj nie ma.

Czy mogę użyć tego narzędzia jako edytora JSON?

Pole na górze strony jest zwykłym edytorem tekstu z walidacją działającą na bieżąco, więc poprawisz dokument bez opuszczania strony i od razu zobaczysz, czy błąd zniknął. Nie ma tu historii zmian ani zapisu w chmurze. Gotowy dokument kopiujesz do schowka albo pobierasz jako plik, a zapamiętane zostaje wyłącznie ustawienie wcięcia.

Czy sformatowany JSON to nadal te same dane?

Tak, jeśli chodzi o strukturę i wartości. Formatowanie zmienia wyłącznie białe znaki poza tekstami, a sortowanie kluczy zmienia jeszcze kolejność pól w obiektach, co dla parsera nie ma znaczenia. Od tej reguły są dwa wyjątki, oba opisane wyżej. Liczby dłuższe niż 15 cyfr tracą precyzję, a sekwencje unikodowe wracają do postaci zwykłych liter.