2011-12-30 22 views
94

JavaScriptオブジェクトまたはJSON文字列のキー名に禁止文字がありますか?またはエスケープする必要がある文字?JSONキー名で有効/無効の文字はどれですか?

具体的には、キー名に "$"、 " - "、スペースを使用したいと思います。

+0

私は部分的に、この答えはあなたをコードしている方法で行うことがあると思います。たとえば、UTF8にはANSIとは異なる文字が使用できます。 – invalidsyntax

+2

JS内の任意の 'キー'を 'obj ['whatever']'表記を使って使うことができます。しかし、 'obj.whatever'バージョンには通常の英数字キーしか使用できません。 –

+3

@invalidsyntax:JSONは定義上Unicodeです。また、ANSIはエンコーディングではなく、文字セットなので、比較はUTF-8-ANSIではなく、Unicode-vs-ANSIでなければなりません。 –

答えて

116

いいえすべての有効な文字列は有効なキーです。それも、限り、あなたはそれを逃れるよう"を持つことができます。

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

あなたがオブジェクトのフィールド名を持つキーを関連付けるためにしようといくつかの言語にこのような値をロードする困難に遭遇するだろうチャンスは、おそらくあります。しかし私はそのような事件については知らない。文字に続いて

+0

Thx!エスケープする必要のある他の文字はありますか?好き:または; ? – Christophe

+8

これらはありません。 JavaScriptでエスケープする必要がある場合は、一般的にJSONでそれを必要とします。しかし、json.orgで馬の口からそれを得るのがベストです。エンドツーエンドの仕様全体を読み取るのに約1分かかります。 –

+0

これは良い答えではありません。どのような文字をエスケープする必要がありますか?どの文字をエスケープできますか?エスケープする必要はありませんか? – DanFromGermany

40

は何の問題も

'一重引用符

」引用

\バックスラッシュ

\ N \トン

のようにすべての制御文字を避けるために、JSONデータにエスケープする必要があります

JSON ParserはJSONの処理に役立ちます。

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

+4

こんにちはアルン、一重引用符をエスケープする必要はありません。実際にそれらをエスケープすると、厳密なJSONパーサーが例外をスローします。 http://www.json.orgの文字列セクションを参照してください。もちろん、JSON文字列の中では(JSON自体ではなく)、それらをエスケープする必要があります。 –

+3

@AlexKeyあなたは完全に正しいです! JSONの{{"singlequotetest": "ここでは何かが正しいかどうか"} "と" {"singlequotetest":あなたのサイトのURLを確認することで、[jsonlint.com](http://jsonlint.com/) "ここに固定されていないものを修正する"} ' –

+0

@Arun Rana - 心配する必要はありません。 –

5

UnicodeはU + DFFFにU +のD800をコードポイントは避けなければならない。それらはUTF-16のサロゲートペアのために予約されているため、彼らはUnicodeでinvalidあります。いくつかのJSONエンコーダ/デコーダはそれらをU + FFFDに置き換えます。たとえば、how the Go language and its JSON library deals with themを参照してください。

"\ uD800"から "\ uDFFF"だけを避けてください(サロゲートペアではありません)。

4

数字の付いたキーの起動は有効ですが、意図しない問題が発生する可能性があることに言及することは重要です。

IE:

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

マイクロソフトのこの2017/18年の年に、彼らは彼らが苦しんだすべての痛みを残念に思います。 – monsto

+0

メトリックIDパラメータを見てください:https://dev.applicationinsights.io/apiexplorer/metrics?appId=DEMO_APP&apiKey=DEMO_KEY&metricId=requests%2Fcount×pan=PT1H ---フィールドの15または20は、jsonフィールドに複数のスラッシュがあります名前。 Karnsのソリューションは特定の分野で機能しますが、1tileのサブフィールドでは機能しないようです。たとえば、次のドットは私のために未定義に戻ります。 –

関連する問題