【问题标题】:Are JSON values valid JSON?JSON 值是有效的 JSON 吗?
【发布时间】:2013-03-04 16:12:35
【问题描述】:

JSON 值是字符串、数字、true、false、null 有效的 JSON 吗? 即,是

true

有效的 JSON 文档?还是必须是数组/对象?

一些验证者接受这个(例如http://jsonlint.com/),而另一些不接受(例如http://jsonschemalint.com/)。 RFC 和 json.org 对此问题并不清楚。

【问题讨论】:

  • RFC 在这个问题上确实很清楚。
  • 这已被重新询问here 并收到更详细的答案。我建议将此标记为重复并保留较新的问题。

标签: json


【解决方案1】:

截至 2014 年 3 月:From the specification:

JSON 文本是一个序列化值。请注意,某些先前的 JSON 规范将 JSON 文本限制为对象或 大批。仅生成对象或数组的实现 要求 JSON 文本将是可互操作的,因为所有 实现将接受这些作为符合 JSON 文本。

但是,在最初提出这个问题时,答案是:否。The original specification said:

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

因此,JSON 文本中最外层的数据类型必须是对象或数组,不能是字符串、布尔值、数字或任何其他数据类型。

【讨论】:

  • 虽然根据官方规范这个答案是正确的,但有趣的是 JSON.parse(42) 似乎在浏览器中工作。
  • 只是一个技术说明 - 您提到的 RFC 是针对“JavaScript 对象表示法的 application/json 媒体类型”。不适用于 JSON 格式。 json.org 和 ECMA-404 都没有说明这一点(afaik)。我个人觉得很奇怪 [42] 是有效的 JSON 而简单的 42 不是。
  • stackoverflow.com/questions/19569221/…(注意ecma-404的发布日期和这个答案)。
【解决方案2】:

是的,根据 ECMA-404 JSON 数据交换标准。

来源:http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf

JSON 文本是由符合 JSON 值语法的 Unicode 代码点形成的标记序列。

以下,JSON值语法如下:

JSON 值可以是对象、数组、数字、字符串、true、false 或 null。

这与@quentin 引用的 RFC 直接冲突。更新后的 RFC 为 8259,其中指出:

请注意,某些先前的 JSON 规范将 JSON 文本限制为对象或数组。仅生成对象或数组的实现 调用 JSON 文本将是可互操作的,因为所有实现都将这些作为符合 JSON 文本接受。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-08
    • 1970-01-01
    • 2014-03-14
    • 2017-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多