这可能没有直接用例。但我想知道为什么以下被认为是无效的json
{"hello":
{[1,2,3,4] : "foobar" }
}
答案 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对象不同。