Formato JSON: esempio e descrizione

20/02/2019

JSON è un'abbreviazione di Script Java Notazione oggetto, che è un formato che usa testo leggibile dall'uomo trasferimento dati composto da coppie attributo-valore. Questo è il formato di dati più comune utilizzato per la comunicazione asincrona tra il browser e il server, in gran parte in sostituzione di XML (utilizzando AJAX).

formato json

JSON è un formato di dati indipendente dalla lingua derivato da JavaScript. Dal 2017, molti linguaggi di programmazione hanno utilizzato il codice per generare e analizzare i dati in esso contenuti. I nomi dei file JSON usano l'estensione .json.

Storia della creazione

Il formato JSON originale è stato sviluppato da Douglas Crockford all'inizio dello zero e successivamente due standard concorrenti (RFC 7159 e ECMA-404) lo hanno definito nel 2013. Lo standard ECMA descrive solo la sintassi valida, mentre la RFC copre alcune delle basi della sicurezza e dell'interoperabilità.

Inoltre, vi è lo standard RFC 7493, che definisce un profilo limitato noto come I-JSON (abbreviazione di "Internet JSON"). Cerca di superare alcuni dei problemi di interazione. Ogni documento di questo tipo è un documento JSON valido.

La necessità di creare questo formato è cresciuta dall'esigenza di un vero protocollo di comunicazione tra il server e il browser, implementato in tempo reale senza l'uso di plug-in (come applet Flash o Java).

formato json di aperto

Sviluppo e applicazione

Come già notato, Douglas Crockford, essendo il creatore di StateSoftware, ha prima identificato e reso popolare il formato JSON. Successivamente, i co-fondatori hanno concordato di creare un sistema utilizzando funzionalità browser standard e hanno fornito un livello di astrazione per gli sviluppatori per creare applicazioni con connessione duplex continua al server web. Allo stesso tempo, è diventato possibile mantenere aperte due connessioni HTTP e elaborarle fino all'orario standard del browser se non sono stati scambiati dati. I cofondatori hanno tenuto una discussione alla tavola rotonda e hanno votato per denominare il formato di dati JSML o JSON, oltre a determinare il tipo di licenza con la quale il nuovo sviluppo sarà disponibile. Attualmente il formato è open source.

formato json online

Uso pratico

Il sito web JSON.org è stato lanciato nel 2002. Nel dicembre 2005, Yahoo! ha iniziato ad offrire alcuni dei suoi servizi web in questo formato. Google ha iniziato a utilizzare i feed JSON per il suo protocollo web GData solo nel dicembre 2006.

originariamente formato di file JSON era destinato a un sottoinsieme del linguaggio di scripting JavaScript (in particolare, Standard ECMA-262 3rd Edition-December) ed era comunemente usato con esso. Tuttavia, è un formato indipendente dalla lingua dei dati. Il codice per l'analisi e la generazione di dati JSON è disponibile in molti linguaggi di programmazione. Il sito Web JSON elenca tutte le librerie.

Sebbene il formato JSON in linea sia stato originariamente pubblicizzato e considerato un sottoinsieme rigoroso di JavaScript e ECMAScript, consente periodicamente la possibilità che alcuni caratteri non siano sfuggiti in stringhe non valide nelle stringhe JavaScript e ECMAScript.

Lo stesso JSON è diventato lo standard internazionale ECMA nel 2013 come lo standard ECMA-404, che è stato utilizzato in RFC 7158 lo stesso anno come riferimento. Nel 2014, RFC 7159 è diventato il riferimento principale per l'utilizzo di JSON su Internet (ad esempio, applicazione MIME / json).

Tipi di dati sintassi ed esempio

I principali tipi di dati JSON sono:

  • Numero: un numero decimale con segno che può contenere una parte frazionaria e può utilizzare la notazione esponenziale E, ma non può includere non numeri (ad esempio, NaN). Il formato non distingue tra numeri interi e numeri in virgola mobile. JavaScript utilizza un formato a virgola mobile a precisione doppia per tutti i suoi valori numerici, ma altri linguaggi che implementano JSON possono codificarli in modo diverso.

esempio di formato json

  • Stringa: una sequenza di caratteri Unicode zero o grandi. Le stringhe sono separate da virgolette doppie e supportano la sintassi con una barra rovesciata.
  • Letterali: qualsiasi valore vero o falso.
  • Array: un elenco ordinato di zero o più valori, ognuno dei quali può essere di qualsiasi tipo. Gli array usano parentesi quadre con virgole.
  • Oggetto: un insieme non ordinato di coppie nome / valore, dove i nomi (chiamati anche chiavi) sono stringhe. Poiché gli oggetti sono destinati a rappresentare array associativi, è consigliabile (anche se non necessario) che ogni chiave sia unica al suo interno. Gli oggetti sono separati da parentesi graffe e usano le virgole per separare ogni coppia, mentre all'interno di ciascuno di essi un carattere di due punti separa la chiave o il nome dal suo valore.
  • Null: valore null che utilizza la parola null.

Sono ammessi spazi limitati e possono essere posizionati attorno o tra elementi di sintassi (valori e segni di punteggiatura, ma non all'interno del valore stringa). A tale scopo, vengono considerati solo quattro caratteri speciali. spazi: spazio, scheda orizzontale, avanzamento riga e barra. In particolare, l'etichetta dell'ordine dei byte non dovrebbe essere generata dall'implementazione corrispondente (sebbene possa essere adottata durante l'analisi di JSON). Una richiesta in formato JSON non fornisce una sintassi per i commenti.

Le versioni precedenti (ad esempio, quelle specificate in RFC 4627) richiedevano che un documento valido fosse costituito solo da un oggetto o un tipo di matrice che potrebbe contenere altri tipi al loro interno. Tale formato JSON, di cui è possibile trovare un esempio su pagine Web obsolete, non è attualmente utilizzato.

caricare in formato json

Problemi con la portabilità dei dati

Sebbene Douglas Crockford originariamente sostenesse che JSON è un sottoinsieme rigido di JavaScript, le sue specifiche consentono in realtà di creare documenti che non sono leggibili in JavaScript. In particolare, JSON consente ai valori di stringa Unicode U + 2028 LINE SEPARATOR e U + 2029 PARAGRAPH SEPARATOR di apparire non schermati sulle linee quotate, ma JavaScript no. Ciò è dovuto al fatto che JSON proibisce solo "caratteri di controllo". Per la massima compatibilità, questi caratteri devono essere preceduti da una barra rovesciata. Questa sottigliezza è importante quando si crea JSONP.

Formato JSON: come aprire?

I documenti JSON possono essere codificati in UTF-8, UTF-16 o UTF-32, la codifica predefinita è UTF-8. Questi standard supportano il set completo di caratteri Unicode, inclusi i caratteri al di fuori del piano multilingue (da U + 10.000 a U + 10FFFF). Tuttavia, se sono sfuggiti, questi caratteri devono essere scritti utilizzando le coppie di surrogati UTF-16 - dettagli mancanti da alcuni analizzatori nel formato JSON. Come aprire e come verrà letto un file di questo tipo?

I numeri in questo formato sono agnostici rispetto alla loro rappresentazione nei linguaggi di programmazione. Non c'è differenza tra un numero intero e un valore in virgola mobile: alcune implementazioni possono considerare 42, 42.0 e 4.2E + 1 come lo stesso numero, mentre altri potrebbero non farlo. Inoltre, non ci sono requisiti per problemi quali overflow, insufficienza, perdita di precisione o arrotondamento. Inoltre, il formato JSON non dice nulla sull'elaborazione di zeri firmati, indipendentemente dal fatto che 0.0 sia diverso da -0.0. La maggior parte delle implementazioni che utilizzano lo standard IEEE 754 a virgola mobile, incluso JavaScript, conservano zeri firmati, ma non tutte le implementazioni JSON possono farlo.

richiesta in formato json

Utilizzare in javascript

Poiché il formato JSON è stato derivato da JavaScript e la sua sintassi è (principalmente) un sottoinsieme della lingua, è possibile utilizzare la funzione JavaScripteval per analizzare i dati JSON. A causa di un problema con l'analisi dei terminatori di stringa Unicode discussi nella sezione precedente, la funzione eval deve eseguire la loro sostituzione.

Questo non è sicuro se la stringa non è validata correttamente. Invece, per leggere e scrivere JSON, utilizzare la libreria di parser JSON o il relativo supporto JavaScript.

Un parser correttamente implementato accetta solo il formato JSON valido, la cui descrizione è presente nel sistema, impedendo l'esecuzione non intenzionale di codice potenzialmente dannoso.

Dal 2010, i browser Web come Firefox e Internet Explorer hanno abilitato il supporto per l'analisi e il caricamento in formato JSON.

Tipi di dati nativi non supportati

La sintassi JavaScript definisce diversi tipi di dati nativi che non sono inclusi nello standard JSON: Mappa, Imposta, Data, Errore, Espressione regolare, Funzione e altri. Questi tipi di dati JavaScript devono essere rappresentati da altri formati, con entrambi i programmi che concordano sul tipo di conversione tra i tipi. Oggi esistono alcuni standard defacto, ad esempio la conversione di una data in una stringa, ma nessuno di questi è generalmente accettato. Altre lingue possono avere un diverso set di tipi nativi che devono essere serializzati attentamente per poter gestire questo tipo di conversione.

descrizione del formato JSON

Schema JSON

Uno schema viene utilizzato per definire una struttura di dati JSON per la convalida, la documentazione e la gestione dell'interazione. Fornisce un tipo di contratto per i dati richiesti dall'applicazione e un modo per modificarlo.

Lo schema è basato su concetti dello schema XML (XSD), ma è nativo. Come in XSD, gli stessi strumenti di serializzazione / deserializzazione sono utilizzati sia per lo schema che per i dati.

Schema è un progetto online attualmente in versione 5 (pubblicato il 13 ottobre 2016). Esistono diversi validatori disponibili per diversi linguaggi di programmazione, ognuno dei quali ha un diverso livello di conformità. Non esiste un'estensione di file standard, ma alcuni esperti suggeriscono di approvare .schema.json.

Tipo MIME

Il tipo MIME ufficiale per il testo JSON è "application / json". Nonostante il fatto che la maggior parte delle implementazioni moderne abbia adottato il tipo MIME ufficiale, molte applicazioni continuano a fornire supporto legacy per altri tipi MIME. Molti fornitori di servizi, browser, server, applicazioni Web, librerie, framework e API utilizzano, aspettano o riconoscono un tipo MIME, il cui contenuto è simile a "text / json" o "text / javascript". Esempi degni di nota includono l'API di ricerca di Google, Yahoo !, Flickr, API di Facebook, DojoToolkit 0.4 e così via.

JSON-RPC

JSON-RPC è un protocollo RPC (Remote Procedure Call) costruito su JSON, creato come sostituto per XML-RPC o SOAP. Questo è un protocollo semplice che definisce solo alcuni tipi di dati e comandi. Consente al sistema di inviare notifiche (informazioni a un server che non richiede una risposta) e diverse chiamate al server, a cui è possibile rispondere senza ordine.

AJAJ

JavaScript asincrono e JSON (o AJAJ) appartengono alla stessa metodologia di pagina Web dinamica di Ajax, ma invece di XML, i dati JSON sono il formato principale. AJAJ è una tecnologia di sviluppo Web che consente a una pagina Web di richiedere nuovi dati dopo che è stata caricata in un browser. Di solito li visualizza dal server in risposta alle azioni dell'utente su questa pagina. Ad esempio, ciò che l'utente inserisce nel campo di ricerca, il codice client quindi invia al server, che risponde immediatamente con un elenco a discesa degli elementi del database pertinenti.

Problemi di sicurezza

Il testo JSON è definito come un oggetto di serializzazione dei dati. Tuttavia, il suo design, come sottoinsieme vagamente definito del linguaggio di scripting JavaScript, pone diversi problemi di sicurezza. Si concentrano sull'uso dell'interprete Javascript per eseguire dinamicamente il testo JSON come JavaScript incorporato. Ciò espone il programma a script errati o malevoli. Questo è un problema serio quando si lavora con dati recuperati da Internet.

Questo metodo semplice e popolare, ma rischioso, utilizza la compatibilità con la funzione JavaScripteval.

Alcuni sviluppatori credono erroneamente che il testo JSON sia sintatticamente simile al codice JavaScript, sebbene questo sia solo parzialmente vero. Pertanto, si ritiene che un modo semplice per un programma JavaScript per analizzare i dati in questo formato consiste nell'utilizzare la funzione integrata JavaScripteval, che è stata progettata per valutare le espressioni "Javascript". Invece di usare un parser specifico, l'interprete stesso viene quindi utilizzato per eseguire i dati JSON, creando oggetti JavaScript naturali. Tuttavia, questo metodo è rischioso se è probabile che i dati JSON possano contenere codice Javascript arbitrario, che verrà quindi eseguito allo stesso modo. A meno che non vengano prese misure per convalidare i dati, il metodo eval è vulnerabile alle vulnerabilità della sicurezza quando i dati e l'intero ambiente JavaScript non sono sotto il controllo di una singola fonte attendibile.

Ad esempio, se i dati non sono verificati, sono soggetti a attacchi di codice JavaScript dannosi. Tali violazioni possono anche creare il rischio di furto di dati, frodi di autenticazione e altri potenziali abusi di dati e risorse.

Pertanto, la nuova funzione JSON.parse è stata sviluppata come alternativa più sicura alla valutazione. È progettato specificamente per elaborare dati esattamente JSON e non JavaScript. Inizialmente era previsto l'inserimento nella quarta edizione dello standard ECMAScript, ma ciò non è accaduto. È stato aggiunto per la prima volta alla versione 5 ed è ora supportato dai principali browser.