是否为 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 字节,仅此而已)的主要内容,如果未能解决你的问题,请参考以下文章