Dane JSON (.json)
RFC StandardJavaScript 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:
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 5BREPREZENTACJA ASCII: { or [
Normalizacja: RFC 8259 / ECMA-404 / ISO/IEC 21778
Specyfikacja techniczna
| Architektura kontenera | Lekki, oparty na tekście, niezależny od języka format wymiany danych |
| Kompresja | Kompresja 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ów | Nie dotyczy |
| Kanały i struktura | Sześć podstawowych typów danych: obiekt, tablica, ciąg znaków, liczba, wartość logiczna, null |
| Maks. wymiary | Nieograniczone; ograniczone jedynie pamięcią analizatora i maksymalną długością ciągu znaków |
| Przezroczystość | Nie dotyczy |
| Streaming i progresywne ładowanie | NDJSON (Newline Delimited JSON) / JSON Lines umożliwiające progresywne przetwarzanie strumieniowe |
Techniczna macierz porównawcza: JSON a konkurencja
| Atrybut techniczny | JSON (Bieżący) | YAML | XML | Protocol Buffers |
|---|---|---|---|---|
| Złożoność składni | Minimalna (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ść parsowania | Ekstremalnie szybka we wszystkich nowoczesnych językach | Wolna (złożona analiza wcięć) | Umiarkowana do wolnej (ciężka budowa drzewa DOM) | Ultra-szybka (deserializacja binarna bez kopiowania) |
| Obsługa komentarzy | Brak (celowo pominięte, aby zapobiec rozrostowi metadanych) | Tak (komentarze #) | Tak (komentarze <!-- -->) | Tak w plikach .proto |
| Rozmiar ładunku sieciowego | Kompaktowy tekst (bardzo wysoki współczynnik kompresji gzip) | Kompaktowy tekst | Rozbudowany 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
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
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.
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.
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.
Przekształcanie nieustrukturyzowanych plików tekstowych JSON w ustrukturyzowane relacyjne bazy danych SQLite pozwala na szybkie indeksowanie i odpytywanie dużych rekordów danych.
Konwersja plików Adobe Swatch Exchange na obiekty Color JSON przekształca binarne palety projektowe w czytelne obiekty tekstowe dla nowoczesnych aplikacji internetowych.
Konwersja tekstowych danych JSON kolorów na binarne próbki Adobe ASE łączy internetowe tokeny projektowe z profesjonalnymi aplikacjami desktopowymi do składu.
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.
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.