Questa semplice stringa è considerata JSON valida?

Ho visto così tante domande complicate in SO se una struttura complicata è considerata un JSON valido o no.

Ma che dire di qualcosa dall’altra parte dello spettro?

"12345" 

È il JSON valido sopra?

È una syntax JSON valida che rappresenta un valore JSON. Indipendentemente dal fatto che un testo JSON valido (il termine formale usato per riferirsi all’output completo di un generatore JSON) dipenda dal contesto.

In RFC 4627 di Douglas Crockford pubblicato nel 2006 (che definisce l’ application/json internet media type):

Un testo JSON è un object o array serializzato.

Pertanto, non sarebbe legale utilizzare quella stringa semplice come corpo completo di una risposta HTTP con l’ application/json tipo di supporto Internet application/json .

Tuttavia, la specifica JSON è stata aggiornata in RFC 7159 pubblicata nel 2014, nonché nella versione 5.1 di ECMA-262 e in ECMA-404 . Le nuove specifiche non hanno la limitazione di cui sopra e quindi considererebbero che la stringa semplice sia un testo JSON valido. In RFC 7159:

Un testo JSON è un valore serializzato. Si noti che alcune specifiche precedenti di JSON vincolavano un testo JSON per essere un object o un array. Le implementazioni che generano solo oggetti o matrici in cui viene richiesto un testo JSON saranno interoperabili nel senso che tutte le implementazioni accetteranno questi come testi JSON conformi.


Un valore JSON, da json.org :

A partire dal 2014, RFC 7159 ha obsoleto le vecchie RFC JSON e dichiara che qualsiasi valore JSON è valido testo JSON e applicazione / contenuto json validi, comprese le stringhe. Tuttavia, segnala anche il problema di incompatibilità con le implementazioni JSON precedenti:

Si noti che alcune specifiche precedenti di JSON vincolavano un testo JSON per essere un object o un array. Le implementazioni che generano solo oggetti o matrici in cui viene richiesto un testo JSON saranno interoperabili nel senso che tutte le implementazioni accetteranno questi come testi JSON conformi.

È una stringa JSON valida, ma non è un testo JSON valido (cioè un file JSON).

Vedi la specifica JSON che dice:

Un testo JSON è un object o array serializzato.

Quindi puoi usarlo all’interno di alcuni JSON, ma non è un file JSON completo da solo.

(Vale anche la pena notare che la specifica definisce un parser JSON:

Un parser JSON trasforma un testo JSON in un’altra rappresentazione.

il mio )

Per un secondo parere, vedi JSON Lint :

 Parse error on line 1: "12345" ^ Expecting '{', '[' 

No, questo non è JSON valido. JSON è un acronimo per JavaScript Object Notation. Mentre l’esempio che hai dato sarebbe valido all’interno di un object definito usando JSON, non è valido da solo. Dai un’occhiata a questo validatore JSON online: http://jsonlint.com/

Errore di analisi sulla riga 1: 12345 ^ In attesa di ‘{‘, ‘[‘

Puoi leggere ulteriori informazioni su JSON su http://json.org .

È una stringa JSON valida, ma non è un object JSON.

Vedi http://www.json.org/