回答:
はい、引用符が必要です。これはそれをより簡単にし、javascriptの予約済みキーワード用の別のエスケープメソッドを必要としないようにするため{for:"foo"}
です。
キーとして文字列を使用するのは正しいことです。RFC 4627からの抜粋-JavaScript Object Notation(JSON)のapplication / json Media Type
2.2。オブジェクト
オブジェクト構造は、0個以上の名前/値ペア(またはメンバー)を囲む中括弧のペアとして表されます。 名前は文字列です。各名前の後にコロンを1つ付けて、名前と値を区切ります。1つのカンマで値と後続の名前を区切ります。オブジェクト内の名前は一意である必要があります。
object = begin-object [ member *( value-separator member ) ] end-object
member = string name-separator value
[...]
2.5。文字列
文字列の表現は、プログラミング言語のCファミリで使用される規則に似ています。文字列は引用符で始まり、引用符で終わります。[...]
string = quotation-mark *char quotation-mark
quotation-mark = %x22 ; "
A string begins and ends with quotation marks.
。
はい、引用符は必須です。http://json.org/さんのコメント:
string
""
" chars "
はい、彼らはやる。ただし、それ以外の場合はJSON5をチェックアウトしてください。
JSON5は、ES5構文を許可するJSONのスーパーセットです。
JSON5リファレンス実装(json5
npmパッケージ)は、組み込みオブジェクトと同じ引数とセマンティクスJSON5
を持つメソッドparse
とstringify
メソッドを持つオブジェクトを提供しJSON
ます。
「parent.child」のドット表記を使用でき、これも有効で便利なparent ["child"]を使用する必要がないため、技術的にはどちらの方法でも許容できると思います。パーサーはすべて、両方の方法をうまく実行する必要があります。パーサーがキーの引用符を必要としない場合、それらを配置しない方がよいでしょう(スペースを節約します)。それが文字列であるという理由でそれらを文字列と呼ぶのは理にかなっており、角括弧はキーに値を使用する機能を提供するので、基本的にそうすることは完全に理にかなっています。Jsonではあなたが置くことができます...
>var keyName = "someKey";
>var obj = {[keyName]:"someValue"};
>obj
Object {someKey: "someValue"}
問題なく問題なく、キーの値が必要で、引用符で囲まれたものはどれも機能しないため、機能しない場合は機能しないので、「キーに引用符は必要ありません」とは言えません。たとえそれが技術的に文字列であると言うのは正しいとしてもです。論理と使用法はそれ以外の場合に主張します。また、任意のブラウザーのコンソールから実行したこの例では、objのObject {"someKey": "someValue"}を正式に出力しません。
obj
コンソールにを入力すると、人間が読める形式のオブジェクトがブラウザに表示されます。オブジェクトのリテラルとして表示することも(例のように)、インタラクティブなものを含め、他の表現を使用することもあります。JavaScriptオブジェクトリテラルでは、キーが有効な識別子であり、予約語ではない場合、キー名を引用符で囲む必要はありません。ただし、JSONでは常にキー名を囲む引用符が必要です。
obj
、コンソールに入力する代わりに、を試してくださいJSON.stringify(obj)
。これで、オブジェクトの有効なJSON表現が表示され、引用符で囲まれたキー名が完成します。逆に、文字列が有効なJSONかどうかを確認するには、を試してくださいJSON.parse(string)
。キーが引用符で囲まれていない場合、これは例外をスローします。たとえば、JSON.parse('{"a":"b"}')
成功JSON.parse('{a:"b"}')
しますが失敗します。
var obj = {[keyName]:"someValue"};
はとても面白いです!JavaScriptオブジェクトリテラルでそれができるとは知りませんでした。少し確認すると、これはES6の新機能であることを示しています-ES5ではできませんでした。