Dane JSON (.json)

RFC Standard

JavaScript Object Notation (JSON) to lekki, czytelny dla człowieka format tekstowy służący do wymiany danych, całkowicie niezależny od języka programowania i powszechnie stosowany w interfejsach API sieci web.

Konwertuj JSON na HTML

Darmowy konwerter z JSON na HTML w przeglądarce. Konwertuj pliki natychmiast na swoim urządzeniu.

Kompresuj JSON online

Prywatnie - pliki nigdy nie opuszczają Twojego urządzenia

Inspekcja i metadane

Systemy operacyjne i analizatory plików identyfikują pliki JSON, sprawdzając początkową sekwencję bajtów binarnych:

Wybierz lub upuść pliki tutaj

Prywatnie - pliki nigdy nie opuszczają Twojego urządzenia

lub wklej Ctrl+V
Gwarancja prywatności bez przesyłania danych do sieci: 0 bajtów przesłanych na zewnętrzne serwery. Całe przetwarzanie odbyło się lokalnie w piaskownicy przeglądarki.

Podpis nagłówka na poziomie bajtów (Magic Bytes)

Systemy operacyjne i analizatory plików identyfikują pliki JSON, sprawdzając początkową sekwencję bajtów binarnych:

PODPIS HEX (OFFSET 0):

7B or 5B

REPREZENTACJA ASCII: { or [

Normalizacja: RFC 8259 / ECMA-404 / ISO/IEC 21778

Specyfikacja techniczna

Architektura konteneraLekki, oparty na tekście, niezależny od języka format wymiany danych
KompresjaKompresja tekstu Gzip / Brotli / Zstandard (zazwyczaj osiąga współczynnik 80%-90%)
Kolejność bajtów (Endianness)Kodowanie Unicode UTF-8 (zaleca się pominięcie znacznika kolejności bajtów / BOM)
Przestrzenie kolorówNie dotyczy
Kanały i strukturaSześć podstawowych typów danych: obiekt, tablica, ciąg znaków, liczba, wartość logiczna, null
Maks. wymiaryNieograniczone; ograniczone jedynie pamięcią analizatora i maksymalną długością ciągu znaków
PrzezroczystośćNie dotyczy
Streaming i progresywne ładowanieNDJSON (Newline Delimited JSON) / JSON Lines umożliwiające progresywne przetwarzanie strumieniowe

Techniczna macierz porównawcza: JSON a konkurencja

Atrybut technicznyJSON (Bieżący)YAMLXMLProtocol Buffers
Złożoność składniMinimalna (6 typów, ścisła składnia)Wysoka (oparta na wcięciach, złożona specyfikacja)Wysoka (rozbudowane znaczniki domykające, przestrzenie nazw)Zdefiniowany schematem binarny format sieciowy
Wydajność parsowaniaEkstremalnie szybka we wszystkich nowoczesnych językachWolna (złożona analiza wcięć)Umiarkowana do wolnej (ciężka budowa drzewa DOM)Ultra-szybka (deserializacja binarna bez kopiowania)
Obsługa komentarzyBrak (celowo pominięte, aby zapobiec rozrostowi metadanych)Tak (komentarze #)Tak (komentarze <!-- -->)Tak w plikach .proto
Rozmiar ładunku sieciowegoKompaktowy tekst (bardzo wysoki współczynnik kompresji gzip)Kompaktowy tekstRozbudowany tekst (duża powtarzalność znaczników)Ultra-kompaktowy format binarny

Typowe tryby uszkodzeń i przewodnik odzyskiwania szesnastkowego

SyntaxError: nieoczekiwany token , w JSON na pozycji X.

Główna przyczyna: Końcowy przecinek po ostatnim elemencie w tablicy lub obiekcie, co jest surowo zabronione w specyfikacji RFC 8259 JSON.

Odzyskiwanie: Usuń końcowe przecinki z kluczy obiektów i elementów tablicy przed przekazaniem danych do funkcji JSON.parse().

SyntaxError: nieoczekiwany token ' w JSON.

Główna przyczyna: Ciągi znaków lub klucze ujęte w pojedyncze cudzysłowy ('') zamiast podwójnych cudzysłowów ("").

Odzyskiwanie: Zastąp wszystkie ciągi i klucze w pojedynczych cudzysłowach standardowymi ciągami w cudzysłowach podwójnych.

Analiza bezpieczeństwa i wektory ataku na parser

JSON składa się wyłącznie z tekstu i jest bezpieczny przed bezpośrednim wykonywaniem kodu, jednak parsowanie niezaufanych danych JSON może prowadzić do zanieczyszczenia prototypu (Prototype Pollution), ataków typu ReDoS lub wyczerpania pamięci.

Znane wektory ataku

  • Zanieczyszczenie prototypu (Prototype Pollution): Klucze o nazwach '__proto__' lub 'constructor' modyfikujące Object.prototype w aplikacjach JavaScript.
  • Atak typu odmowa usługi (DoS) polegający na przepełnieniu stosu za pomocą głęboko zagnieżdżonych struktur JSON (np. 10 000 otwierających nawiasów klamrowych).
  • Utrata precyzji numerycznej: Liczby w języku JavaScript większe niż 2^53 - 1 (9 007 199 254 740 991) cicho tracą precyzję.

Najlepsze praktyki obronne: Nigdy nie należy ewaluować kodu JSON za pomocą funkcji eval(). Używaj metody JSON.parse() oraz oczyszczaj właściwości '__proto__' w rekurencyjnych funkcjach scalających obiekty.

Pochodzenie historyczne i kamienie milowe

2017Standard RFC 8259 ustanawia UTF-8 jedynym obowiązkowym kodowaniem znaków dla formatu JSON.
2013ECMA-404 definiuje składnię JSON, używaną w wielu językach programowania i na wielu platformach.
2001Douglas Crockford określa specyfikację JSON w celu umożliwienia bezstanowej komunikacji danych między przeglądarką a serwerem.

Główne zalety

  • Czytelna dla człowieka, samoopisująca się i zwięzła struktura tekstowa.
  • Wbudowana w silniki JavaScript (JSON.parse) oraz wszystkie główne języki programowania natywna obsługa analizy składniowej.
  • Ścisła specyfikacja zapobiega dowolnemu wykonywaniu kodu.

Ograniczenia techniczne i wady

  • Brak obsługi komentarzy, końcowych przecinków oraz cyklicznych referencji obiektów.
  • Brak natywnych typów binarnych (dane binarne muszą być zakodowane w base64, co zwiększa rozmiar o 33%).
  • Nieefektywna serializacja w porównaniu do formatów binarnych, takich jak Protocol Buffers czy MessagePack.

Ciekawe informacje techniczne

  • Douglas Crockford dodał do oryginalnych narzędzi JSMin JSON klauzulę licencyjną: „Oprogramowania należy używać w dobrym celu, a nie w złym” ('The Software shall be used for Good, not Evil').
  • JSON jest ścisłym podzbiorem składni języka JavaScript, jednak do momentu wprowadzenia standardu ES2019 surowe, niewyeskejpwane znaki U+2028 i U+2029 były poprawne w formacie JSON, lecz niepoprawne w łańcuchach tekstowych języka JavaScript.
  • Douglas Crockford odkrył, że wczesne przeglądarki internetowe mogły ewaluować dane JSON bezpośrednio do obiektów za pomocą natywnej funkcji eval() języka JavaScript, zanim dedykowane interfejsy API JSON.parse() zostały standaryzowane w specyfikacji ECMAScript 5.

Często zadawane pytania techniczne

Dlaczego format JSON nie zezwala na komentarze?

Gramatyka JSON nie dopuszcza komentarzy. Implementacje mogą różnie obsługiwać rozszerzenia i dane specyficzne dla aplikacji, dlatego sam format nie gwarantuje interoperacyjności.

Jak przechowywać 64-bitowe liczby całkowite w formacie JSON bez utraty precyzji?

Natywny typ liczbowy Number w języku JavaScript to liczba zmiennoprzecinkowa podwójnej precyzji zgodna ze standardem IEEE 754, która precyzyjnie obsługuje wyłącznie liczby całkowite do wartości 2^53 - 1. 64-bitowe liczby całkowite (takie jak identyfikatory bazodanowe czy znaczniki czasu) muszą być serializowane w formacie JSON jako ciągi znaków (np. '1234567890123456789').

Jaka jest różnica między standardowym JSON a formatem NDJSON / JSON Lines?

Standardowy JSON ujmuje cały ładunek danych w jeden główny obiekt lub tablicę, co wymaga od analizatorów wczytania całego tekstu przed jego przetworzeniem. NDJSON (Newline Delimited JSON) oddziela poszczególne poprawne rekordy JSON za pomocą znaków nowej linii (\n), co umożliwia wydajne pamięciowo przesyłanie strumieniowe wiersz po wierszu gigantycznych zbiorów danych.

Powiązane pary konwersji JSON

JSON do HTML

Konwersja danych JSON na kod źródłowy HTML przekształca surowe, ustrukturyzowane dane w postaci par klucz-wartość w czytelne dla człowieka dokumenty internetowe gotowe do renderowania w przeglądarce.

HTML do JSON

Konwersja kodu źródłowego HTML na dane JSON przekształca czytelne dla człowieka dokumenty internetowe w ustrukturyzowane pary klucz-wartość w celu przetwarzania programowego i pozyskiwania danych przez interfejsy API.

SQL do JSON

Konwersja skryptu tekstowego zrzutu SQL na eksport danych JSON przekształca sztywne tabele relacyjnej bazy danych w elastyczne, zagnieżdżone obiekty dla nowoczesnych aplikacji internetowych.

JSON do SQLITE

Przekształcanie nieustrukturyzowanych plików tekstowych JSON w ustrukturyzowane relacyjne bazy danych SQLite pozwala na szybkie indeksowanie i odpytywanie dużych rekordów danych.

ASE do JSON

Konwersja plików Adobe Swatch Exchange na obiekty Color JSON przekształca binarne palety projektowe w czytelne obiekty tekstowe dla nowoczesnych aplikacji internetowych.

JSON do ASE

Konwersja tekstowych danych JSON kolorów na binarne próbki Adobe ASE łączy internetowe tokeny projektowe z profesjonalnymi aplikacjami desktopowymi do składu.

GPL do JSON

Konwersja plików tekstowych palet GIMP do struktur JSON kolorów umożliwia aplikacjom internetowym bezpośredni odczyt próbek barw bez skomplikowanych skryptów analizujących.

JSON do CSS

Konwersja ustrukturyzowanych plików JSON kolorów na zmienne CSS przekształca surowe obiekty danych w natywne właściwości stylizacji dla stron internetowych.