是否为 null 有效 JSON(4 字节,仅此而已)

Posted

技术标签:

【中文标题】是否为 null 有效 JSON(4 字节,仅此而已)【英文标题】:Is null valid JSON (4 bytes, nothing else) 【发布时间】:2012-01-21 13:21:22 【问题描述】:

今日热议:

文本流 null 是有效的 JSON 吗?

根据http://www.ietf.org/rfc/rfc4627.txt?number=4627:

... 2. JSON 语法

JSON 文本是一个标记序列。令牌集包括 六个结构字符、字符串、数字和三个文字 名字。

JSON 文本是一个序列化的对象或数组。

这是否应该解释为两个语句都必须为真才能使文本成为有效的 JSON?

http://code.google.com/p/json-framework/issues/detail?id=49 似乎(在底部)表明这是无效的。 http://json.parser.online.fr/ 也将此标记为无效。

但是,许多其他库似乎允许这样做,而且实际上,单个有效令牌似乎可能是合法结果。

有确定的答案吗?

【问题讨论】:

【参考方案1】:

[注意!此答案不再正确,请参阅@niksnut 的答案。]

是的,两个陈述都必须为真。文字标记 null 是一个 JSON 。 JSON 文本是一个序列化的对象或数组,需要 或 []。

【讨论】:

大多数 JSON 解析器如何接受“null”作为有效文档?一个典型的例子是 Node.JS (JSON.parse('null') => null or echo 'null' | python -mjson.tool => null. 回声'7' | python -mjson.tool 产生 7,所以我推断该工具显然愿意解析孤立的 JSON 文字值以及完整的(对象或数组)JSON 文本。 Ruby 的 JSON 解析器默认只拒绝 null 作为值:ruby -r json -e 'JSON.parse("null")' 给出“unexpected token at 'null' (JSON::ParserError)” 一些解析器也会阻塞"[]" 注意!此答案不再正确,请参阅下面的@niksnut 答案【参考方案2】:

RFC 7159 取消了 JSON 文本必须是对象或数组的限制。语法规定:

JSON-text = ws 值 ws

在哪里

value = false/null/true/object/array/number/string

因此,“null”现在是一个有效的 JSON 文档。

【讨论】:

以上是关于是否为 null 有效 JSON(4 字节,仅此而已)的主要内容,如果未能解决你的问题,请参考以下文章

将 WPF 控件设置为扩展以填充可用空间,仅此而已

语法错误,意外的“”。请,(仅此而已)[关闭]

正则表达式匹配整个字符串,仅此而已

允许用户设置 SSH 隧道,但仅此而已

iPad AdMob 集成问题 - 广告显示但仅此而已

Vagrant 共享文件夹适用于工作目录,但仅此而已