Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JSON在顶层总是需要大括号吗?_Javascript_Json - Fatal编程技术网

Javascript JSON在顶层总是需要大括号吗?

Javascript JSON在顶层总是需要大括号吗?,javascript,json,Javascript,Json,我最近学习了一些关于JSON的知识,并试图了解它在顶层是否总是需要花括号,或者它是否也可以是一个数组?或者数组必须用带键名的大括号包装,然后将数组作为值包装 例如,是否必须是这样的: {"title":"title 1"} 或者也可能是这样: [1,2,3] 我在问规范允许什么以及json文件的使用者可能期望什么,正如我所看到的典型例子,它总是用大括号括起来,里面有键值对它可以是数组,不需要用大括号括起来 console.log(JSON.strin

我最近学习了一些关于JSON的知识,并试图了解它在顶层是否总是需要花括号,或者它是否也可以是一个数组?或者数组必须用带键名的大括号包装,然后将数组作为值包装

例如,是否必须是这样的:

{"title":"title 1"}
或者也可能是这样:

[1,2,3]

我在问规范允许什么以及json文件的使用者可能期望什么,正如我所看到的典型例子,它总是用大括号括起来,里面有键值对

它可以是数组,不需要用大括号括起来


console.log(JSON.stringify([1,2,3])它可以是以下类型:

  • 空的
  • 布尔值
  • 排列
  • 反对
  • 字符串:仅当其包含在引号中时
  • 示例:

    JSON.parse('{}');              // {}
    JSON.parse('true');            // true
    JSON.parse('"foo"');           // "foo"
    JSON.parse('[1, 5, "false"]'); // [1, 5, "false"]
    JSON.parse('null');            // null
    
    发言人说:

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

    …意味着顶层需要是
    {}
    []

    许多实现忽略了这一限制,允许在顶层使用任何JSON数据类型(对象、数组、数字、字符串、布尔值、null)

    报告说:

    JSON文本是一个序列化的值。请注意,某些以前的 JSON规范将JSON文本约束为对象或 数组。仅生成对象或数组的实现,其中 所调用的JSON文本将是可互操作的,因为所有 实现将接受这些作为一致的JSON文本


    所以现在在顶层允许任何JSON数据类型,但是您需要注意,一些较旧的软件可能只支持顶层的对象和数组。

    您是在问一个标准,还是实际上可以解决什么问题?
    只生成调用JSON文本的对象或数组的实现在某种意义上是可互操作的会接受这些符合标准的JSON文本吗?
    这意味着什么?我的后续@Quentin则是如何使用其他类型的JSON文件,是否有这样的例子,或者这只是一个允许但没有人这样做的情况。例如,如果JSON可以只包含一个字符串,或者一组逗号分隔的字符串,那么这是否实用呢?我只见过它与{}@jobe一起使用——这意味着只能生成基于
    {}
    []
    的JSON的旧序列化程序将生成可以由支持新标准的解析器解析的JSON。“例如,如果JSON可以只包含一个字符串”-那么解析器将输出一个字符串“或一组逗号分隔的字符串”-然后解析器会抛出异常。这不是有效的JSON。