2011-12-15 9 views
28

dibattito caldo oggi:IS NULL valido JSON (4 byte, nient'altro)

è il flusso di testo null valida JSON?

Secondo http://www.ietf.org/rfc/rfc4627.txt?number=4627:

...
2. JSON grammatica

Un JSON testo è una sequenza di token. Il set di token include sei caratteri strutturali, stringhe, numeri e tre nomi letterali .

Un testo JSON è un oggetto o una matrice serializzati.

Se questo deve essere interpretato come entrambe le istruzioni devono essere vere affinché il testo sia valido JSON?

Tuttavia, molte altre librerie sembrano permetterlo, e in effetti, sembra come un unico token valida potrebbe essere un risultato legittimo.

C'è una risposta definitiva?

risposta

20

Sì, entrambe le istruzioni devono essere vere. Il token letterale null è un valore JSON . Un testo JSON è un oggetto o array serializzato, che richiede {} o [].

+0

Come mai allora la maggior parte dei parser JSON là fuori accetta "null" come documento valido? Esempi tipici sono Node.JS (JSON.parse ('null') => null o echo 'null' | python -mjson.tool => null. – whaefelinger

+1

echo '7' | python -mjson.tool produce 7, quindi I supponiamo che lo strumento sia disposto ad analizzare i valori letterali JSON isolati così come i testi JSON completi (oggetto o array) –

+0

Il parser JSON di Ruby rifiuta solo 'null' come valore di default:' ruby ​​-r json -e 'JSON.parse ("null") "givens" token imprevisto su "null" (JSON :: ParserError) " –

10

RFC 7159 elimina la limitazione che un testo JSON deve essere un oggetto o un array. La grammatica specifica:

JSON-text = valore ws ws

dove

value = falso/null/true/oggetto/array/numero/stringa

Quindi, "null" è ora un documento JSON valido.

+0

Grazie, non sapevo che le specifiche erano cambiate. –