Poprawny i czytelny JSON

JSON to format, w którym większość internetowych API wymienia dane: obiekty w nawiasach klamrowych z kluczami w cudzysłowach podwójnych, tablice w nawiasach kwadratowych, napisy, liczby, true, false i null. API często zwracają go zminifikowanego w jednej linii: sformatowanie z wcięciami czyni go czytelnym, minifikacja usuwa spacje i oszczędza bajty.

Składnia jest bardziej rygorystyczna niż w JavaScripcie: bez przecinka po ostatnim elemencie, bez komentarzy, bez apostrofów, klucze zawsze w cudzysłowach podwójnych. To najczęstsze błędy przy ręcznym pisaniu JSON, a parser wskazuje je w dokładnym miejscu.

Sortowanie kluczy alfabetycznie nie zmienia znaczenia, bo w obiekcie JSON kolejność kluczy nie ma znaczenia, ale znacznie ułatwia porównanie dwóch odpowiedzi lub dwóch plików konfiguracyjnych narzędziem diff.

Częste błędy

  • Pozostawianie przecinka po ostatnim elemencie obiektu lub tablicy: JSON go nie akceptuje.
  • Używanie apostrofów lub kluczy bez cudzysłowów jak w JavaScripcie: JSON wymaga cudzysłowów podwójnych.
  • Wpisywanie NaN, Infinity lub undefined: to nie są wartości JSON; używa się null.

Najczęstsze pytania

Czy wklejony JSON jest wysyłany na serwer?

Nie: formatowanie i walidacja odbywają się w przeglądarce przez JSON.parse. Tylko krótki JSON trafia do adresu strony, aby można ją było udostępnić.

Dlaczego bardzo duże liczby się zmieniają?

JSON.parse używa liczb zmiennoprzecinkowych JavaScriptu, dokładnych do 2⁵³: identyfikator taki jak 12345678901234567890 zostaje zaokrąglony. API z dużymi identyfikatorami zwykle przesyłają je jako napisy.

Czym JSON różni się od JSON5?

JSON5 to rozszerzenie dopuszczające komentarze, końcowe przecinki i apostrofy; wygodne w plikach konfiguracyjnych, ale to nie jest standardowy JSON i JSON.parse go odrzuca.

Jak działa to obliczenie

Tekst jest odczytywany przez JSON.parse, który stosuje gramatykę RFC 8259; przy błędzie pozycja podana przez przeglądarkę jest zamieniana na wiersz i kolumnę. Wynik jest zapisywany ponownie przez JSON.stringify, z 2 lub 4 spacjami albo tabulatorem na poziom, lub bez spacji. Przy sortowaniu klucze każdego obiektu są porządkowane rekurencyjnie według kodu Unicode. Rozmiary podano w bajtach UTF-8.