我已经仔细阅读了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代码点组成的令牌序列 语法。这组令牌包括六个结构令牌、字符串、数字和三个字面名称令牌。

其他回答

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对象。所以答案是[]和{}。

JSON代表JavaScript对象表示法。只有{}和[]定义Javascript对象。其他的例子是值字面量。Javascript中有用于处理这些值的对象类型,但表达式“string”是文字值的源代码表示,而不是对象。

请记住JSON不是Javascript。它是一种表示数据的符号。它有一个非常简单和有限的结构。JSON数据使用{},:[]字符进行结构化。只能在该结构中使用文字值。

服务器用对象描述或文字值来响应是完全有效的。所有JSON解析器都应该只处理一个文字值,但只能处理一个值。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("[]"); // []

是的,是的,是的,是的,是的。它们都是有效的JSON值字面量。

然而,官方RFC 4627规定:

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

所以一个完整的“文件”应该包含一个对象或数组作为最外层的结构,当然可以是空的。然而,许多JSON解析器也接受原始值作为输入。