Dati JSON (.json)
RFC StandardJavaScript 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:
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 5BRAPPRESENTAZIONE ASCII: { or [
Standardizzazione: RFC 8259 / ECMA-404 / ISO/IEC 21778
Specifiche tecniche
| Architettura del contenitore | Formato leggero di interscambio dei dati, basato su testo e indipendente dal linguaggio |
| Compressione | Compressione di testo Gzip / Brotli / Zstandard (riduzione tipica delle dimensioni dell'80%-90%) |
| Endianness dei byte | Unicode codificato in UTF-8 (consigliato senza Byte Order Mark / BOM) |
| Spazi colore | Non applicabile |
| Canali e struttura | Sei tipi di dati di base: oggetto, array, stringa, numero, booleano, null |
| Dimensioni massime | Illimitate; i limiti dipendono solo dalla memoria del parser e dalla lunghezza massima delle stringhe |
| Trasparenza | Non applicabile |
| Streaming e progressivo | NDJSON (Newline Delimited JSON) / JSON Lines consente l'elaborazione progressiva dei flussi |
Matrice di confronto tecnico: JSON vs Concorrenti
| Attributo tecnico | JSON (Attuale) | YAML | XML | Protocol Buffers |
|---|---|---|---|---|
| Complessità della sintassi | Minimale (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 parsing | Estremamente veloce in tutti i linguaggi moderni | Lento (analisi complessa dell'indentazione) | Da moderata a lenta (costruzione del DOM onerosa) | Estremamente veloce (deserializzazione binaria senza copie) |
| Commenti supportati | No (deliberatamente esclusi per evitare la proliferazione dei metadati) | Sì (commenti #) | Sì (commenti <!-- -->) | Sì nei file .proto |
| Dimensione dei dati trasferiti in rete | Testo compatto (rapporto gzip molto elevato) | Testo compatto | Testo 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
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.
Coppie di conversione per JSON correlate
La conversione di dati JSON in sorgente HTML trasforma coppie chiave-valore strutturate grezze in documenti web leggibili pronti per il rendering del browser.
La conversione del codice sorgente HTML in dati JSON trasforma documenti web leggibili dall'uomo in coppie chiave-valore strutturate per l'elaborazione programmatica e l'inserimento nelle API.
La conversione di uno script di dump SQL in un'esportazione di dati JSON trasforma tabelle di database relazionali rigide in oggetti flessibili e nidificati per le applicazioni Web moderne.
La trasformazione di file di testo JSON non strutturati in database relazionali SQLite strutturati consente di indicizzare e interrogare rapidamente grandi quantità di dati.
La conversione dei file Adobe Swatch Exchange in strutture Color JSON trasforma le palette di design binarie in oggetti di testo leggibili per le moderne applicazioni web.
La conversione dei dati di testo Color JSON in campioni binari Adobe ASE collega i token di design basati sul web e le applicazioni di layout desktop professionali.
La conversione dei file di testo GIMP Palette in strutture Color JSON consente alle applicazioni web di leggere i campioni di colore direttamente senza complessi script di analisi.
La conversione di file Color JSON strutturati in variabili CSS trasforma oggetti di dati grezzi in proprietà di stile native per i siti web.