3

たとえば、これは有効な JSON ドキュメントであると想定されていますか?

"foo"

json.org の文法仕様は完全には明確ではありません。仕様のどこにも、すべてが有効な JSON ドキュメントの{}オブジェクトまたは配列にある必要があるとは書かれていないと思います。[]

JSONLint は、スタンドアロンの文字列"foo"をエラーとしてマークし、すべてが{}オブジェクトまたは[]配列内にあると想定します。

ただし、主要なブラウザー (IE 8、IE 10、Chrome 28、Firefox 23、Opera 12) の JSON オブジェクトは、スタンドアロンのリテラルを問題なく受け入れます。

>>> JSON.parse('"foo"');
"foo"
>>> JSON.parse('true');
true
>>> JSON.parse('1234');
1234

Python 2.7+ でも同じです:

>>> import json
>>> json.loads('"foo"')
u'foo'
>>> json.loads('true')
True
>>> json.loads('1234')
1234

では、誰が正しく、誰が間違っているのでしょうか?

4

1 に答える 1

6

コメントでこれを見つけた

実際には、2 つの異なる JSON 仕様があります。RFC 4627 では、JSON テキストがオブジェクトまたは配列である必要があります。ECMA-262、第 5 版、セクション 15.12 は、この制限を課していません。

JSON ルート要素

于 2013-08-13T07:01:10.533 に答える