为什么数组作为json格式的键无效?

时间:2015-05-15 18:48:08

标签: arrays json

这可能没有直接用例。但我想知道为什么以下被认为是无效的json

{"hello": 
   {[1,2,3,4] : "foobar" }
}

3 个答案:

答案 0 :(得分:5)

这是无效的,因为JSON对象基于名称/值对。简单地说,数组不是名称。该名称是一个标识符,它不包含(并且不应该包含)任何信息或功能。有关JSON.org的JSON规范的详细信息。

从上面的页面:

  

JSON基于两种结构:

     
      
  • 名称/值对的集合。在各种语言中,这是   实现为对象,记录,结构,字典,哈希表,键控   列表或关联数组。
  •   
  • 有序的值列表。在大多数语言中,这被实现为数组,向量,列表或序列。
  •   

答案 1 :(得分:3)

为什么只是因为这是创建JSON的人所决定的。至于为什么他们这样做,可能是匹配JavaScript,这也是无效的。

数组是一个对象,所以[1,2,3,4] != [1,2,3,4]。如果将对象属性声明为此内联,则无法取消引用该属性,因为在对象声明中不会引用该数组。

如果您要做类似

的事情
var arr = [1,2,3,4];

没有办法区分名为arr的属性(在Javascript中有效,{arr: "value"})和插值数组值。

从语义上讲,将数组作为键是没有好处的。密钥通常不是要操作的属性 - 它们仅仅是标识符。

答案 2 :(得分:2)

  

为什么以下被认为是无效的json

因为它不符合JSON规范。

JSON定义了JavaScript对象的交换格式。 JavaScript对象始终是并且始终是字符串值和值对的集合。

数组不是JavaScript对象属性的有效字符串值键。有一些JavaScript“地图”允许对象作为键,但它们与JavaScript对象不同。