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.
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.
| Typ | Przykład | Reguł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.5e3 | Tylko dziesiętne: opcjonalny minus, bez zer wiodących, opcjonalny ułamek i wykładnik. Bez NaN i Infinity. |
| true, false lub null | true | Mał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ściowe | Problem | JSON.parse |
|---|---|---|
{"a": 1,} | Przecinek końcowy | Odrzucono |
{'a': 1} | Ciągi w apostrofach | Odrzucono |
{"a": 1 /* note */} | Komentarze | Odrzucono |
{a: 1} | Klucz bez cudzysłowu | Odrzucono |
{"n": NaN} | NaN nie jest liczbą w JSON | Odrzucono |
{"n": 012} | Zero wiodące | Odrzucono |
{"n": 0x1F} | Liczba szesnastkowa | Odrzucono |
Sekwencje ucieczki w ciągach JSON
| Znak | Zapis 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.