我仔细阅读了http://json.org/的JSON描述,但我不确定我是否知道这个简单问题的答案。什么字符串是最低可能的有效JSON?
"string"
是字符串有效的JSON?42
是简单数字有效的JSON?true
是布尔值有效的JSON?{}
是空对象有效的JSON?[]
是空数组有效的JSON?发布于 2013-08-24 22:17:10
在写这篇文章的时候,JSON只是用RFC4627描述的。它(在“2”的开头)将JSON文本描述为序列化的对象或数组。
这意味着在符合该标准的解析器和字符串器中,只有{}
和[]
是有效的、完整的JSON字符串。
然而,ECMA-404的引入改变了这一点,并更新了advice can be read here。我也在这个问题上使用了written a blog post。
然而,更令人困惑的是,web浏览器中可用的JSON
对象(例如JSON.parse()
和JSON.stringify()
)是standardised in ES5,它清楚地定义了可接受的JSON文本,如下所示:
本规范中使用的JSON交换格式与RFC4627描述的格式完全相同,但有两个例外:
这意味着所有JSON值(包括字符串、空值和数字)都被JSON对象接受,即使JSON对象在技术上遵守RFC4627。
请注意,因此您可以通过JSON.stringify(5)
在符合规范的浏览器中对数字进行字符串化,这将被另一个符合RFC4627的解析器拒绝,但该解析器没有上面列出的特定异常。例如,would seem to be one such example which accepts objects and arrays as the root。另一方面,PHP specifically adds the exception说“它还将编码和解码标量类型和NULL”。
发布于 2014-03-13 02:55:34
在互联网上至少有四个文档可以被认为是JSON标准。引用的RFC都描述了mime类型application/json
。下面是每个人对顶层值的看法,以及是否允许在顶层使用除对象或数组之外的任何内容:
:No.
JSON文本是一系列的
。这组令牌包括六个结构字符、字符串、数字和三个文字名称。
JSON文本是序列化的对象或数组。
JSON-text =对象/数组
请注意,RFC-4627被标记为“信息性的”,而不是“建议的标准”,并且它已被RFC-7159淘汰,而RFC-8259又被废弃。
:是的。
JSON文本是一系列的
。这组令牌包括六个结构字符、字符串、数字和三个文字名称。
JSON文本是序列化的值。请注意,以前的某些JSON规范将JSON文本约束为对象或数组。只生成调用JSON文本的对象或数组的实现将是可互操作的,因为所有实现都会将它们接受为符合JSON文本。
JSON-text = ws值ws
RFC-8259的日期为2017年12月,并被标记为“互联网标准”。
:是的。
JSON语法语法根据
词法语法定义的标记来定义有效的JSON文本。语法的目标符号是JSONText。
语法JSONText:
JSONValue JSONValue:
JSONNullLiteral JSONBooleanLiteral JSONObject JSONArray JSONString JSONNumber
:是的。
JSON文本是由符合JSON值语法的Unicode码点组成的标记序列。这组标记包括六个结构标记、字符串、数字和三个文字名称标记。
发布于 2013-08-24 22:18:29
根据RFC 4627中的旧定义(2014年3月被RFC7159废弃),这些都是有效的“JSON值”,但只有最后两个才构成完整的"JSON文本“:
文本是序列化的对象或数组。
根据所使用的解析器,可能会接受单独的"JSON值“。例如(坚持使用"JSON值“与"JSON文本”术语):
JSON.parse()
函数接受任何“JSON值”json_decode
是在版本5.2.0中引入的,只接受整个"JSON text",但在版本5.2.1这种区别有点像"XML文档“和"XML片段”之间的区别,尽管从技术上讲,<foo />
是一个格式良好的XML文档(最好写成<?xml version="1.0" ?><foo />
,但正如注释中所指出的,<?xml
声明在技术上是可选的)。
https://stackoverflow.com/questions/18419428
复制相似问题