UltKit

Formatowanie i walidacja JSON

Wklej JSON, aby go sformatować, zminifikować lub posortować klucze. Jeśli nie da się go sparsować, narzędzie pokaże wiersz i kolumnę, w których parser się zatrzymał, ze wskaźnikiem pod błędnym miejscem, więc brakujący przecinek w odpowiedzi liczącej 3000 wierszy znajdziesz w kilka sekund.

Wynik

Znaki: 0 · słowa: 0 · wiersze: 0

Znaki: 0 · słowa: 0 · wiersze: 0

Działa w całości w tej karcie przeglądarki. Twój tekst nie jest wysyłany ani zapisywany.

Typy wartości JSON

RFC 8259 dopuszcza dokładnie te wartości. Obiekty i tablice można zagnieżdżać; wszystko inne to wartości końcowe.

TypPrzykładReguła
Obiekt{"id": 7, "tags": ["a"]}Klucze muszą być ciągami w cudzysłowie; elementy rozdziela się przecinkami, bez przecinka końcowego.
Tablica[1, "two", null]Uporządkowana lista dowolnych wartości, dozwolone są różne typy.
Ciąg znaków"caf\u00e9 \"quoted\""Tylko podwójny cudzysłów; znaki sterujące trzeba poprzedzać znakiem ucieczki; sekwencje \u mają cztery cyfry szesnastkowe.
Liczba-12.5e3Tylko dziesiętne: opcjonalny minus, bez zer wiodących, opcjonalny ułamek i wykładnik. Bez NaN i Infinity.
true, false lub nulltrueMałe litery, bez cudzysłowu.

Co odrzuca parser

Każde z poniższych danych przekazano do tej samej funkcji JSON.parse, której używa formatowanie, podczas budowania tej strony.

Dane wejścioweProblemJSON.parse
{"a": 1,}Przecinek końcowyOdrzucono
{'a': 1}Ciągi w apostrofachOdrzucono
{"a": 1 /* note */}KomentarzeOdrzucono
{a: 1}Klucz bez cudzysłowuOdrzucono
{"n": NaN}NaN nie jest liczbą w JSONOdrzucono
{"n": 012}Zero wiodąceOdrzucono
{"n": 0x1F}Liczba szesnastkowaOdrzucono

Sekwencje ucieczki w ciągach JSON

ZnakZapis w JSON
Cudzysłów"\""
Ukośnik odwrotny"\\"
Wysuw wiersza"\n"
Tabulator"\t"
Powrót karetki"\r"
Znak sterujący U+0001"\u0001"
Ukośnik (ucieczka opcjonalna)"/"
Litera spoza ASCII (ucieczka niepotrzebna)"é"

Zasady, które spełnia poprawny dokument JSON

JSON jest określony w RFC 8259 (co do istoty identycznym z ECMA-404). Dokument to pojedyncza wartość: obiekt, tablica, ciąg znaków, liczba, true, false lub null. Klucze obiektów są zawsze ciągami znaków w cudzysłowie podwójnym. Ciągi znaków używają wyłącznie cudzysłowu podwójnego i muszą zawierać sekwencje ucieczki dla cudzysłowu, ukośnika odwrotnego oraz każdego znaku sterującego poniżej U+0020; tabulatory i podziały wierszy wewnątrz ciągu zapisuje się więc jako \t i \n. RFC 8259 wymaga też kodowania UTF-8 dla JSON wymienianego między systemami.

Liczby są dziesiętne: bez zer wiodących, bez zapisu szesnastkowego, bez NaN i Infinity oraz bez znaku plus na początku. Format nie dopuszcza komentarzy ani końcowych przecinków. Te dwie ostatnie reguły powodują większość błędów w praktyce, ponieważ literały obiektów JavaScript, JSON5 i wiele plików konfiguracyjnych dopuszcza jedno i drugie. Poniższa tabela referencyjna powstała przez podanie każdego typowego błędu temu samemu parserowi, którego używa formatter.

Formatowanie, minifikacja, sortowanie

Formatowanie dodaje podziały wierszy i wcięcia, dzięki czemu struktura jest czytelna; dwie spacje to najczęstszy styl w projektach JavaScript, cztery spacje to zwykły wybór przy json.dumps(indent=4) w Pythonie, a tabulatory pozwalają każdemu ustawić własną szerokość. Minifikacja usuwa wszystkie zbędne spacje, co zmniejsza ładunki API i pozwala zmieścić dokument w jednym wierszu w logach lub zmiennych środowiskowych.

Sortowanie kluczy porządkuje alfabetycznie składowe każdego obiektu, rekurencyjnie. Obiekty JSON z definicji nie mają kolejności, więc sortowanie nie zmienia znaczenia, ale znacznie ułatwia porównanie dwóch dokumentów z różnych systemów. Pamiętaj, że parsowanie zamienia liczby na liczby zmiennoprzecinkowe double z JavaScriptu: liczby całkowite powyżej 2^53 (9 007 199 254 740 992), takie jak niektóre identyfikatory z baz danych, tracą przy ponownym formatowaniu precyzję, dlatego przechowuj je jako ciągi znaków.

Z JSON do innych formatów

Sformatowany dokument jest czytelniejszy, ale czasem potrzebujesz go w innej postaci. Tablica obiektów staje się arkuszem dzięki narzędziu JSON do CSV, a konwerter danych przenosi całe pliki między JSON, XML, YAML i CSV.

Najczęściej zadawane pytania

Dlaczego formatowanie JSON odrzuca mój plik z komentarzami?
Standardowy JSON nie ma składni komentarzy; RFC 8259 celowo je pomija. Usuń komentarze albo zachowaj plik jako JSONC lub JSON5, jeśli narzędzie, które go czyta, obsługuje te formaty.
Co oznacza „Unexpected token” w błędzie JSON?
Parser napotkał znak, który nie może wystąpić w tym miejscu, na przykład apostrof, końcowy przecinek przed } albo klucz bez cudzysłowu. Wskazany wiersz i kolumna odnoszą się do tego znaku.
Czy sortowanie kluczy zmienia moje dane?
Nie. Kolejność składowych obiektu nie ma w JSON znaczenia, więc posortowany dokument jest równoważny. Kolejność w tablicach ma znaczenie i nigdy nie jest zmieniana.
Dlaczego długa liczba zmieniła się po formatowaniu?
JavaScript przechowuje liczby jako 64-bitowe liczby zmiennoprzecinkowe, które dokładnie reprezentują liczby całkowite tylko do 2^53. Większe identyfikatory są zaokrąglane podczas parsowania; przesyłaj je jako ciągi znaków, aby zachować każdą cyfrę.
Czy mogę sformatować plik JSON zamiast go wklejać?
Otwórz plik w dowolnym edytorze tekstu, zaznacz całość i wklej tutaj. Bardzo duże pliki, liczące dziesiątki megabajtów, mogą spowolnić kartę, gdy pole tekstowe je wyświetla.