单个独立文字可以形成有效的JSON"文档"吗?

Kal*_*Kal 3 validation json specifications lint

例如,这应该是一个有效的JSON文档吗?

"foo"
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

Python 2.7+也是如此:

>>> import json
>>> json.loads('"foo"')
u'foo'
>>> json.loads('true')
True
>>> json.loads('1234')
1234
Run Code Online (Sandbox Code Playgroud)

那么谁是对的,谁是错的?

小智 6

在评论中找到了这个

实际上有两种不同的JSON规范.RFC 4627要求JSON文本是对象或数组.ECMA-262,第5版,第15.12节没有规定这一限制.

JSON根元素

  • RFC 4627已被[RFC 7159](https://tools.ietf.org/html/rfc7159#section-2)淘汰,它明确允许JSON文本为任何可用类型. (2认同)