Dati JSON (.json)

RFC Standard

JavaScript Object Notation (JSON) è un formato di testo leggero e leggibile dall'uomo per l'interscambio di dati, completamente indipendente dal linguaggio e universalmente utilizzato per le API Web.

Converti da JSON a HTML

Convertitore gratuito da JSON a HTML nel browser. Converti i file istantaneamente sul tuo dispositivo.

Comprimi JSON online

Privato - i file non lasciano mai il tuo dispositivo

Ispezione e metadati

I sistemi operativi e gli analizzatori di file identificano i file JSON ispezionando la sequenza di byte binari iniziale:

Seleziona o rilascia i file qui

Privato - i file non lasciano mai il tuo dispositivo

o incolla Ctrl+V
Garanzia di privacy con zero trasmissioni di rete: 0 byte caricati su server esterni. Tutta l'elaborazione è avvenuta localmente nella sandbox del tuo browser.

Firma dell'intestazione a livello di byte (Magic Bytes)

I sistemi operativi e gli analizzatori di file identificano i file JSON ispezionando la sequenza di byte binari iniziale:

FIRMA ESADECIMALE (OFFSET 0):

7B or 5B

RAPPRESENTAZIONE ASCII: { or [

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

Specifiche tecniche

Architettura del contenitoreFormato leggero di interscambio dei dati, basato su testo e indipendente dal linguaggio
CompressioneCompressione di testo Gzip / Brotli / Zstandard (riduzione tipica delle dimensioni dell'80%-90%)
Endianness dei byteUnicode codificato in UTF-8 (consigliato senza Byte Order Mark / BOM)
Spazi coloreNon applicabile
Canali e strutturaSei tipi di dati di base: oggetto, array, stringa, numero, booleano, null
Dimensioni massimeIllimitate; i limiti dipendono solo dalla memoria del parser e dalla lunghezza massima delle stringhe
TrasparenzaNon applicabile
Streaming e progressivoNDJSON (Newline Delimited JSON) / JSON Lines consente l'elaborazione progressiva dei flussi

Matrice di confronto tecnico: JSON vs Concorrenti

Attributo tecnicoJSON (Attuale)YAMLXMLProtocol Buffers
Complessità della sintassiMinimale (6 tipi, sintassi rigorosa)Alta (basata sull'indentazione, specifica complessa)Alta (tag di chiusura ridondanti, namespace)Formato di rete binario definito da schema
Prestazioni di parsingEstremamente veloce in tutti i linguaggi moderniLento (analisi complessa dell'indentazione)Da moderata a lenta (costruzione del DOM onerosa)Estremamente veloce (deserializzazione binaria senza copie)
Commenti supportatiNo (deliberatamente esclusi per evitare la proliferazione dei metadati)Sì (commenti #)Sì (commenti <!-- -->)Sì nei file .proto
Dimensione dei dati trasferiti in reteTesto compatto (rapporto gzip molto elevato)Testo compattoTesto prolisso (ripetizione frequente dei tag)Binario ultra-compatto

Modalità di corruzione comuni e guida al recupero esadecimale

SyntaxError: token , imprevisto nel JSON alla posizione X.

Causa principale: Virgola finale dopo l'ultimo elemento di un array o oggetto, vietata dallo standard JSON RFC 8259.

Ripristino: Rimuovere le virgole finali dalle chiavi degli oggetti e dalle voci degli array prima di passare a JSON.parse().

SyntaxError: token ' imprevisto nel JSON.

Causa principale: Stringhe o chiavi racchiuse tra virgolette singole ('') anziché doppie ("").

Ripristino: Sostituire tutte le stringhe e le chiavi racchiuse tra virgolette singole con stringhe standard tra virgolette doppie.

Analisi di sicurezza e vettori di attacco del parser

JSON è costituito solo da testo e non consente l'esecuzione diretta di codice, ma l'analisi di JSON non attendibile può causare Prototype Pollution, ReDoS o esaurimento della memoria.

Vettori di attacco noti

  • Prototype Pollution: chiavi chiamate '__proto__' o 'constructor' che modificano Object.prototype nelle applicazioni JavaScript.
  • Denial of service per stack overflow tramite strutture JSON profondamente annidate (ad es. 10.000 parentesi quadre aperte).
  • Perdita di precisione numerica: i numeri JavaScript superiori a 2^53 - 1 (9.007.199.254.740.991) perdono silenziosamente precisione.

Migliori pratiche difensive: Non valutare mai JSON con eval(). Usa JSON.parse() e sanifica le proprietà '__proto__' nelle funzioni che uniscono ricorsivamente gli oggetti.

Origini storiche e tappe fondamentali

2017La RFC 8259 standardizza UTF-8 come l'unica codifica di caratteri obbligatoria per JSON.
2013ECMA-404 definisce la sintassi JSON, usata da molti linguaggi di programmazione e piattaforme.
2001Douglas Crockford specifica JSON per consentire la comunicazione dati priva di stato tra browser e server.

Vantaggi principali

  • Struttura di testo leggibile dall'uomo, auto-esplicativa e concisa.
  • Supporto nativo per l'analisi sintattica integrato nei motori JavaScript (JSON.parse) e in tutti i principali linguaggi di programmazione.
  • La specifica rigorosa impedisce l'esecuzione di codice arbitrario.

Limiti tecnici e svantaggi

  • Nessun supporto per commenti, virgole finali o riferimenti circolari tra oggetti.
  • Nessun tipo binario nativo (i dati binari devono essere codificati in base64, con un aumento delle dimensioni del 33%).
  • Serializzazione inefficiente rispetto a formati binari come Protocol Buffers o MessagePack.

Curiosità tecniche

  • Douglas Crockford ha aggiunto ai tool JSON originali di JSMin la clausola di licenza software «Il software deve essere usato per il bene, non per il male».
  • JSON è un sottoinsieme rigoroso della sintassi JavaScript, ma fino a ES2019 i caratteri U+2028 e U+2029 non sottoposti a escape erano validi in JSON, ma non nelle stringhe JavaScript.
  • Douglas Crockford ha scoperto che i primi browser web potevano convertire direttamente JSON in oggetti usando la funzione nativa eval() di JavaScript, prima che le API dedicate JSON.parse() fossero standardizzate in ECMAScript 5.

Domande tecniche frequenti

Perché JSON non consente i commenti?

La grammatica JSON non ammette commenti. Le implementazioni possono gestire in modo diverso le estensioni e i dati specifici delle applicazioni, quindi il formato da solo non garantisce l’interoperabilità.

Come si memorizzano interi a 64 bit in JSON senza perdere precisione?

Il tipo Number nativo di JavaScript è un numero in virgola mobile a doppia precisione IEEE 754, che supporta con precisione solo numeri interi fino a 2^53 - 1. Gli interi a 64 bit (come ID di database o timestamp) devono essere serializzati come stringhe (ad es. '1234567890123456789') in JSON.

Qual è la differenza tra JSON e NDJSON / JSON Lines?

Il JSON standard racchiude un intero payload in un singolo oggetto o array radice e richiede ai parser di caricare tutto il testo prima di elaborarlo. NDJSON (Newline Delimited JSON) separa i singoli record JSON validi con caratteri di nuova riga (\n), consentendo di elaborare in streaming, riga per riga e con un uso efficiente della memoria, enormi insiemi di dati di più gigabyte.