2016-03-28 7 views
5

私はJavaScriptの提案された機能について読んできましたが、私は心配しているのは、オブジェクトリテラルと配列のカンマサポートの後ろにあることです。末尾のカンマでJSONが壊れますか?

パラメータの場合、末尾のカンマはここには関係しないので、無視してみましょう。私はバージョンコントロールの利点を理解していますが、JSONにどのように反応するのだろうかと心配しています。

const arr = [ 
    'red', 
    'green', 
    'blue', 
]; 

これは有効になります。

JSON構文を返すとどうなりますか? JSONはRFCでサポートされているため、JSONが末尾のカンマをサポートするかどうかは疑問です。たぶん1日...

しかし、どのようにJavaScriptのようなものを返す処理します:ヘッダのコンテンツタイプがJSONであるか、コンマはすべてを壊す末尾かどう

const jsonReturn = [{ 
    "derp":1 
}, { 
    "foo":"bar" 
}, { 
    "slide":true, 
},]; 

は末尾が内部で削除されるコンマのでしょうか?

+0

短い答え:末尾のカンマは無効なJSONですが、ほとんどのJSパーサーがジャンプします(JavaScript _not_ JSONとして解釈されるとき)。 –

+0

右端のカンマがJSONとして返された場合、パーサーはそれをスキップして依然有効なJSONを依頼者に返す必要があると言っています(つまり、この用語をできるだけゆるやかに使用しています)。 –

+2

あなたはここでJSONを実際に使用していません。あなたはJSOを参照しています。ここにあるものがJSONパーサーにヒットした場合、それは吐き出されます。しかし、それをJSOのように投げ捨てると(ほとんどのJSパーサーによって)うまくいくはずです。 –

答えて

7

JSONとJSソースは互いに関係しないので、問題は発生しません。

JSONは後続のカンマをサポートしていません(例としてはありません)。 The current JSON specは、コンマがオブジェクトまたは配列内の値の間にのみ発生することを明確に示しています。

JSがコンマの末尾をサポートしている場合、オブジェクトのソース表現とシリアル化されたバージョンはほとんど関係ありません。ほとんどのブラウザは、今日は末尾にカンマを受け入れますが、すべてのコンマは、実際のオブジェクト(辞書/ハッシュまたは構造体)の表現で廃棄されています

> var foo = {bar: 1, baz: 2,}; 
< undefined 
> foo 
< Object {bar: 1, baz: 2} 

今日でも、問題なく動作コンマ末尾でオブジェクトをシリアライズ:

> JSON.stringify({bar: 1, baz: 2,}) 
< "{"bar":1,"baz":2}" 

コンマはソースのみを解析するためのもので、ランタイムのオブジェクト表現には存在しません。

+0

オブジェクトの配列内の末尾のカンマにも同じことが適用されますか? @ SterlingArcherは絶対に –

+1

です。いったんインスタンス化されると、オブジェクトも配列も実際にはカンマを使用しません。純粋にパーサのためのものであり、パーサは末尾のコンマを認識するかどうかを選択できます。 IEはそうではなく、ほとんどのブラウザがそうしています。 – ssube

関連する問題