首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >最低有效JSON是多少?

最低有效JSON是多少?
EN

Stack Overflow用户
提问于 2013-08-24 22:08:51
回答 8查看 93K关注 0票数 210

我仔细阅读了http://json.org/的JSON描述,但我不确定我是否知道这个简单问题的答案。什么字符串是最低可能的有效JSON?

  • "string"是字符串有效的JSON?
  • 42是简单数字有效的JSON?
  • true是布尔值有效的JSON?
  • {}是空对象有效的JSON?
  • []是空数组有效的JSON?
EN

回答 8

Stack Overflow用户

回答已采纳

发布于 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描述的格式完全相同,但有两个例外:

  • ECMAScript JSON语法的顶级JSONText产品可以由任何JSONValue组成,而不是像RFC4627所指定的那样被限制为JSONObject或JSONArray。

  • snipped

这意味着所有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”。

票数 178
EN

Stack Overflow用户

发布于 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码点组成的标记序列。这组标记包括六个结构标记、字符串、数字和三个文字名称标记。

票数 45
EN

Stack Overflow用户

发布于 2013-08-24 22:18:29

根据RFC 4627中的旧定义(2014年3月被RFC7159废弃),这些都是有效的“JSON值”,但只有最后两个才构成完整的"JSON文本“:

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

根据所使用的解析器,可能会接受单独的"JSON值“。例如(坚持使用"JSON值“与"JSON文本”术语):

  • 现在在现代浏览器中标准化的JSON.parse()函数接受任何“JSON值”
  • PHP函数json_decode是在版本5.2.0中引入的,只接受整个"JSON text",但在版本5.2.1
  • Python's中被修改为接受任何“JSON值”根据示例on this manual page
  • the验证器接受任何“JSON值”http://jsonlint.com的验证器期望一个完整的"JSON文本“
  • Ruby JSON模块将只接受一个完整的"JSON文本”(至少根据注释JSON

这种区别有点像"XML文档“和"XML片段”之间的区别,尽管从技术上讲,<foo />是一个格式良好的XML文档(最好写成<?xml version="1.0" ?><foo />,但正如注释中所指出的,<?xml声明在技术上是可选的)。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18419428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档