Sono inorridito dalla presenza di disinformazione altamente votata su una domanda così apprezzata su un argomento di base.
Le stringhe JSON non possono essere citate con virgolette singole . Le varie versioni delle specifiche ( l'originale di Douglas Crockford, la versione ECMA e la versione IETF ) dichiarano tutte che le stringhe devono essere citate tra virgolette doppie. Questa non è una questione teorica, né una questione di opinione come suggerisce attualmente la risposta accettata; qualsiasi parser JSON nel mondo reale sbaglierà se provi a farlo analizzare una stringa tra virgolette singole.
La versione di Crockford ed ECMA mostra persino la definizione di una stringa usando una bella immagine, il che dovrebbe chiarire il punto in modo inequivocabile:
L'immagine carina elenca anche tutte le sequenze di escape legittime all'interno di una stringa JSON:
\"
\\
\/
\b
\f
\n
\r
\t
\u
seguito da quattro cifre esadecimali
Si noti che, contrariamente alle sciocchezze in alcune altre risposte qui, \'
non è mai una sequenza di escape valida in una stringa JSON. Non è necessario, perché le stringhe JSON sono sempre tra virgolette doppie.
Infine, normalmente non dovresti pensare di sfuggire ai personaggi da solo durante la generazione programmatica di JSON (anche se ovviamente lo farai quando modifichi manualmente, per esempio, un file di configurazione basato su JSON). Invece, forma la struttura di dati che vuoi codificare usando qualsiasi tipo di mappa nativa, matrice, stringa, numero, booleano e null della tua lingua, quindi codificala in JSON con una funzione di codifica JSON. Tale funzione è probabilmente integrata in qualsiasi linguaggio tu stia usando, come JavaScript JSON.stringify
, PHP json_encode
o Pythonjson.dumps
. Se stai usando un linguaggio che non ha tale funzionalità integrata, puoi probabilmente trovare una libreria di analisi e codifica JSON da usare. Se usi semplicemente le funzioni di lingua o libreria per convertire elementi da e verso JSON, non avrai nemmeno bisogno di conoscere le regole di escape di JSON. Questo è ciò che avrebbe dovuto fare la domanda sbagliata che ci si pone qui.