I numeri JSON possono essere quotati?

Possono esserci quotazioni intorno ai numeri JSON? Nella maggior parte dei link di ricerca, sembra che i numeri non “richieda” virgolette. Ma, se i parser dovessero accettare entrambi "attr" : 6 e "attr" : "6" ?

Se MyParser ha un metodo getInt per ottenere un numero dato la chiave, MyParser.getInt("attr") dovrebbe restituire 6 in entrambi i casi o generare un’eccezione nel secondo caso?

In JSON , 6 è il numero sei. "6" è una stringa contenente la cifra 6 . Quindi la risposta alla domanda “Si possono citare i numeri json?” è fondamentalmente “no”, perché se li metti tra virgolette, non sono più numeri.

Ma, se i parser dovessero accettare entrambi “attr”: 6 e attr: “6”?

Il secondo esempio non è valido, perché attr deve essere tra virgolette, ad esempio:

 {"attr": "6"} 

… è valido e definisce un object con una proprietà chiamata attr con il valore stringa "6" , mentre:

 {"attr": 6} 

… è valido e definisce un object con una proprietà chiamata attr con il valore numero 6 , e infine:

 {attr: 6} 

…e

 {attr: "6"} 

… sono entrambi JSON non validi perché i nomi delle proprietà devono essere tra virgolette.

Se MyParser ha un metodo getInt per ottenere un numero dato la chiave, MyParser.getInt (“attr”) dovrebbe restituire 6 in entrambi i casi o generare un’eccezione nel secondo caso?

Questa è una decisione di progettazione per la persona che fornisce il parser, fondamentalmente la scelta tra getInt essere severi (lanciare un’eccezione se lo provi su "attr": "6" ) o perdere (forzare "6" a 6 e restituirlo). JavaScript è di solito libero e quindi potrebbe esserci un argomento per essere liberi; viceversa, il fatto che JavaScript sia libero a volte causa problemi, il che potrebbe essere un argomento per essere severi.

Questo dipenderà dalla lingua che usi per ottenere l’intero, perché se il linguaggio di programmazione non fornisce la conversione implicita da stringa a int, puoi avere problemi.

Non dovresti preoccuparti troppo, dal momento che il linguaggio di programmazione moderno oggigiorno può convertire implicitamente una stringa in un numero senza codice aggiuntivo. Qualcosa che dovresti prendere in considerazione è, quando usi i linguaggi di programmazione come JavaScript, quando usi == e === quando confronti i valori, === prende in considerazione il tipo del valore mentre == no, quindi 6 === "6" restituirà false , mentre 6 == "6" restituirà true .

Rispondendo alla tua domanda, non genererà un’eccezione se stai utilizzando un linguaggio di programmazione che fornisce la conversione implicita da stringa a int.

Puoi citare il numero. Entrambi sono validi (“attr”: 6 e “attr”: “6”) L’unica cosa è tenere a mente che durante l’estrazione del valore è necessario utilizzare GetInt () nel primo caso e GetString () nel secondo caso e poi converti quella stringa in numero intero.