【问题标题】:Can a single, stand-alone literal form a valid JSON "document"?一个单独的、独立的文字可以形成一个有效的 JSON“文档”吗?
【发布时间】:2013-08-13 06:55:17
【问题描述】:

例如,这应该是有效的 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

那么谁对谁错?

【问题讨论】:

    标签: json validation specifications lint


    【解决方案1】:

    在评论中发现这个

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

    JSON root element

    【讨论】:

    • ietf.org/rfc/rfc4627.txt 是 RFC 4627 的副本,并将 JSON 文本定义为第 2 节开头的序列化对象或数组。但实际上,就像 OP 一样,我发现单例文本也是解析器通常可以接受。
    • 就个人而言,我更喜欢 ECMA-262 的做法。我相信将 JSON 文本解析为可分配给单个变量(对象、数组、字符串、布尔值、数字)的 anything 是最有意义的。
    • RFC 4627 已被 RFC 7159 废弃,它明确允许 JSON 文本为任何可用类型。
    猜你喜欢
    • 1970-01-01
    • 2011-05-14
    • 1970-01-01
    • 2013-12-06
    • 2012-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多