2012-11-10 28 views
22

Ritenete la risposta JSON web: "Si è verificato un errore di serializzazione"Un valore di stringa singola è considerato JSON valido?

sia valido? O non

Alcuni validatore accetta: http://www.freeformatter.com/json-validator.html

e qualche altra no.

Sylvain

+0

Di quale risposta stai parlando? Potresti condividerlo? – Srinivas

+0

Mi riferivo al valore della stringa singola: "Si è verificato un errore di serializzazione" –

+0

Assicurarsi che la stringa sia preceduta da virgolette (""), ovvero non solo 'Si è verificato un errore di serializzazione' ma ' "Si è verificato un errore di serializzazione "' – tuxSlayer

risposta

-3

Non mi importa se qualche validatore accetta. È sbagliato. È una questione di buone pratiche, il formato Json deve essere {"key": "value", .....}. Se consideri che il testo JSON, può funzionare, ma per il resto del programmatore non è un Json serio. Se usi solo quel testo, allora non hai bisogno di Json.

+0

Non così semplice. Le nuove specifiche considerano i singoli valori come JSON validi. –

+0

Si consideri il caso di un'API JSON, un caso molto comune. Quando si restituisce un errore 404 o di altro tipo, come deve essere codificato il valore nel proprio mondo? Vorrei anche suggerire che "JSON serio" (sicuramente intendi "serio JSON"?) È ciò che definisce la specifica JSON. Per Internet e il tipo di contenuto application/json che è RFC-7159 (https://tools.ietf.org/html/rfc7159) e consente una pura stringa, in particolare: "JSON-text = ws value ws [. ..] Un valore JSON DEVE essere un oggetto, matrice, numero o stringa, o uno dei seguenti tre nomi letterali: false null true ". –

0

Da RFC4627:

A JSON text is a serialized object or array. 
    JSON-text = object/array 

IE, l'elemento radice deve essere un oggetto o matrice, e non può essere un valore di stringa per sé.

+0

[bump] (http://stackoverflow.com/a/24805020/2031077) – igor

10

Secondo la grammatica esposto in http://www.json.org/ (che fa riferimento al Standard ECMA-262 3rd Edition - December 1999 par.5.1.5 Il JSON grammatica) è sbagliato:

L'elemento iniziale deve essere:

enter image description here

enter image description here

e quindi un valore può essere una stringa:

enter image description here

+1

Ciao Tony, Ho consultato anche quella pagina e ho avuto la stessa comprensione. Ma volevo chiedere alla community poiché alcuni siti (come quello che ho inserito come riferimento) considerano il valore della singola stringa come una risposta JSON valida. Vedere le risposte qui conferma solo che non ha senso. –

+0

Ho provato quel sito e sono d'accordo con te sembra fuorviante. Di solito uso http://jsonlint.com/ che non accetta una stringa come JSON valido: "Errore di analisi sulla riga 1: " ciao " ^ In attesa di '{', '['". Il messaggio di errore è chiaro: si aspetta un oggetto o una matrice. –

24

Come per il nuovo JSON RFC, json, che contiene solo un singolo valore è piuttosto valido.

Un testo JSON è un valore serializzato. Si noti che alcune specifiche precedenti di JSON vincolavano un testo JSON per essere un oggetto o un array.

+0

+1 Grazie per l'aggiornamento – fgb

+0

Sì, è valido. Si noti che per una migliore interoperabilità è possibile restituire un singolo array di elementi: '[" valore "]' –

16

C'è un cambiamento del cuore su questo tra RFC4627 e RFC7159:

RFC4627:

Un JSON testo è un oggetto serializzato o un array.

JSON-text = object/array 

RFC7159:

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

JSON-text = ws value ws 

Nessuna giustificazione filosofica o pratico è previsto per questo cambiamento del cuore. La versione precedente probabilmente ha più senso in quanto stabilisce costantemente che sia un elemento della lista di singe sia un elemento di una sola mappa (una coppia o una tupla) siano contenuti. La seconda versione consente di contenere un solo elemento della lista.

Problemi correlati