2011-12-30 28 views
94

Esistono caratteri vietati nei nomi chiave, per oggetti JavaScript o stringhe JSON? O personaggi che devono essere sfuggiti?Quali caratteri sono validi/non validi in un nome di chiave JSON?

Per essere più specifici, mi piacerebbe utilizzare "$", "-" e lo spazio nei nomi delle chiavi.

+0

penso che in parte questa risposta ha a che fare con il modo in cui si sta codificando. Ad esempio, UTF8 ha caratteri diversi consentiti rispetto ad ANSI. – invalidsyntax

+2

Puoi usare qualsiasi "chiave" che vuoi in JS usando la notazione 'obj ['whatever']'. Ma solo le normali chiavi alfanumeriche possono essere usate per la versione 'obj.whatever'. –

+3

@invalidsyntax: JSON è Unicode per definizione. Inoltre, ANSI non è una codifica, è un set di caratteri, quindi il confronto deve essere Unicode-vs-ANSI, non UTF-8-vs-ANSI. –

risposta

116

No. Ogni stringa valida è una chiave valida. Si può anche avere " finché si sfuggire che:

{"The \"meaning\" of life":42} 

Non c'è forse una possibilità che si incontrano difficoltà loading tali valori in alcune lingue, che cercano di associare i tasti con i nomi dei campi oggetto. Tuttavia, non conosco casi simili.

+0

Thx! Qualsiasi altro personaggio che avrebbe bisogno di essere sfuggito? Mi piace: o; ? – Christophe

+8

Non quelli. Qualunque sia la necessità di scappare in JavaScript, in genere ne ha bisogno in JSON. È meglio prenderlo dalla bocca del cavallo, però, su json.org. Ci vuole circa un minuto per leggere l'intera specifica end-to-end. –

+0

Questa non è una buona risposta imho. Quale tipo di personaggi devono essere sfuggiti? Quali personaggi possono essere sfuggiti, ma non devono essere sfuggiti? – DanFromGermany

40

Seguendo caratteri devono essere sfuggiti nei dati JSON per evitare qualsiasi problema

'apice singolo

”quote

\ backslash

tutti i caratteri di controllo come \ n \ t

JSON Parser può aiutarti a gestire JSON.

EDIT: Here's a replacement JSON parser since OP's link is dead

+4

Ciao Arun, le virgolette singole non hanno bisogno di essere sfuggite. In effetti, sfuggire a loro causerà un parser JSON rigoroso per generare un'eccezione. Fare riferimento alla sezione delle stringhe di http://www.json.org Naturalmente, tuttavia, è necessario sfuggire ad essi quando si trova all'interno di una stringa JSON (ma non lo stesso JSON). –

+3

@AlexKey hai perfettamente ragione! Arun, puoi verificarlo su [jsonlint.com] (http://jsonlint.com/) testando il JSON '{" singlequotetest ":" qualcosa qui non ha ragione "}' versus '{" singlequotetest ": "Correzione di ciò che non era giusto"} ' –

+0

@Arun Rana - nessun problema. –

5

Unicode Codepoints U + D800 a U + DFFF deve essere evitato: sono invalid in Unicode poiché sono riservati per UTF-16 coppie di surrogati. Alcuni codificatori/decodificatori JSON li sostituiranno con U + FFFD. Vedi ad esempio how the Go language and its JSON library deals with them.

Quindi evitare "\ uD800" su "\ uFFFF" da solo (non in coppie surrogate).

4

Vale la pena ricordare che mentre l'avvio delle chiavi con i numeri è valido, potrebbe causare alcuni problemi non previsti.

IE:

var testObject = { 
    "1tile": "test value" 
}; 
console.log(testObject.1tile); // fails, invalid syntax 
console.log(testObject["1tile"]; // workaround 
+0

Spero davvero che, in questa età di Microsoft 2017/18, siano pentiti di tutto il dolore che hanno inflitto. – monsto

+0

Guarda i loro parametri ID metriche: https://dev.applicationinsights.io/apiexplorer/metrics?appId=DEMO_APP&apiKey=DEMO_KEY&metricId=requests%2Fcount×pan=PT1H --- 15 o 20 dei loro campi hanno più barre in avanti nel loro campo json nomi. Mentre la soluzione Karns funziona per un campo specifico, non riesco a farla funzionare per un sottocampo di 1tile. Ad esempio, un punto successivo restituisce indefinito per me. –

Problemi correlati