我已经仔细阅读了JSON描述http://json.org/,但我不确定我知道这个简单问题的答案。什么字符串是最小可能有效的JSON?
“字符串”是字符串有效的JSON? 42简单的数字是有效的JSON吗? 布尔值是有效的JSON吗? {}空对象是一个有效的JSON? []空数组是有效的JSON吗?
我已经仔细阅读了JSON描述http://json.org/,但我不确定我知道这个简单问题的答案。什么字符串是最小可能有效的JSON?
“字符串”是字符串有效的JSON? 42简单的数字是有效的JSON吗? 布尔值是有效的JSON吗? {}空对象是一个有效的JSON? []空数组是有效的JSON吗?
当前回答
Internet上至少有四个文档可以被视为JSON标准。引用的rfc都描述了mime类型application/json。下面是关于顶层值,以及是否允许除对象或数组之外的任何东西位于顶层的说明:
rfc - 4627:没有。
JSON文本是一个令牌序列。令牌集包括6个 结构字符、字符串、数字和三个字面名称。 JSON文本是一个序列化的对象或数组。 JSON-text =对象/数组
请注意,RFC-4627被标记为“信息”,而不是“拟议标准”,它被RFC-7159废止,而RFC-7159又被RFC-8259废止。
rfc - 8259:是的。
JSON文本是一个令牌序列。令牌集包括6个 结构字符、字符串、数字和三个字面名称。 JSON文本是一个序列化的值。请注意,以前的某些 JSON规范将JSON文本约束为对象或对象 数组中。只生成对象或数组的实现 JSON文本调用将是互操作的意义上,所有 实现将接受这些作为符合JSON文本。 JSON-text = ws值
RFC-8259的日期为2017年12月,标记为“INTERNET标准”。
ecma - 262:是的。
JSON句法语法根据JSON词法定义的标记定义有效的JSON文本 语法。语法的目标符号是JSONText。 语法 JSONText: JSONValue JSONValue: JSONNullLiteral JSONBooleanLiteral JSONObject JSONArray JSONString JSONNumber
ecma - 404:是的。
JSON文本是由符合JSON值的Unicode代码点组成的令牌序列 语法。这组令牌包括六个结构令牌、字符串、数字和三个字面名称令牌。
其他回答
只要按照json.org页面上给出的铁路图表来做就可以了。[]和{}是可能的最小有效JSON对象。所以答案是[]和{}。
ecma规范可供参考:
http://www.ecma-international.org/ecma-262/5.1/
The parse function parses a JSON text (a JSON-formatted String) and produces an ECMAScript value. The JSON format is a restricted form of ECMAScript literal. JSON objects are realized as ECMAScript objects. JSON arrays are realized as ECMAScript arrays. JSON strings, numbers, booleans, and null are realized as ECMAScript Strings, Numbers, Booleans, and null. JSON uses a more limited set of white space characters than WhiteSpace and allows Unicode code points U+2028 and U+2029 to directly appear in JSONString literals without using an escape sequence. The process of parsing is similar to 11.1.4 and 11.1.5 as constrained by the JSON grammar.
JSON.parse("string"); // SyntaxError: Unexpected token s
JSON.parse(43); // 43
JSON.parse("43"); // 43
JSON.parse(true); // true
JSON.parse("true"); // true
JSON.parse(false);
JSON.parse("false");
JSON.parse("trueee"); // SyntaxError: Unexpected token e
JSON.parse("{}"); // {}
JSON.parse("[]"); // []
Internet上至少有四个文档可以被视为JSON标准。引用的rfc都描述了mime类型application/json。下面是关于顶层值,以及是否允许除对象或数组之外的任何东西位于顶层的说明:
rfc - 4627:没有。
JSON文本是一个令牌序列。令牌集包括6个 结构字符、字符串、数字和三个字面名称。 JSON文本是一个序列化的对象或数组。 JSON-text =对象/数组
请注意,RFC-4627被标记为“信息”,而不是“拟议标准”,它被RFC-7159废止,而RFC-7159又被RFC-8259废止。
rfc - 8259:是的。
JSON文本是一个令牌序列。令牌集包括6个 结构字符、字符串、数字和三个字面名称。 JSON文本是一个序列化的值。请注意,以前的某些 JSON规范将JSON文本约束为对象或对象 数组中。只生成对象或数组的实现 JSON文本调用将是互操作的意义上,所有 实现将接受这些作为符合JSON文本。 JSON-text = ws值
RFC-8259的日期为2017年12月,标记为“INTERNET标准”。
ecma - 262:是的。
JSON句法语法根据JSON词法定义的标记定义有效的JSON文本 语法。语法的目标符号是JSONText。 语法 JSONText: JSONValue JSONValue: JSONNullLiteral JSONBooleanLiteral JSONObject JSONArray JSONString JSONNumber
ecma - 404:是的。
JSON文本是由符合JSON值的Unicode代码点组成的令牌序列 语法。这组令牌包括六个结构令牌、字符串、数字和三个字面名称令牌。
根据RFC 4627中的旧定义(已于2014年3月被RFC 7159废止),这些都是有效的“JSON值”,但只有最后两个才构成完整的“JSON文本”:
JSON文本是一个序列化的对象或数组。
根据所使用的解析器,可能会接受单独的“JSON值”。例如(坚持“JSON值”vs“JSON文本”术语):
the JSON.parse() function now standardised in modern browsers accepts any "JSON value" the PHP function json_decode was introduced in version 5.2.0 only accepting a whole "JSON text", but was amended to accept any "JSON value" in version 5.2.1 Python's json.loads accepts any "JSON value" according to examples on this manual page the validator at http://jsonlint.com expects a full "JSON text" the Ruby JSON module will only accept a full "JSON text" (at least according to the comments on this manual page)
这种区别有点像“XML文档”和“XML片段”之间的区别,尽管从技术上讲<foo />是一个格式良好的XML文档(它最好写成<?XML版本="1.0" ?><foo />,但正如注释中指出的,<?XML声明在技术上是可选的)。
var x; console.log (JSON.stringify (x));//输出"{}"
所以你的答案是“{}”,它表示一个空对象。