最近开始深入研究JSON,我目前正在尝试使用一个数字作为“标识符”,这不是很好。 foo:"bar"
工作正常,而0:"bar"
却没有。
var Game = {
status: [
{
0:"val",
1:"val",
2:"val"
},
{
0:"val",
1:"val",
2:"val"
}
]
}
alert(Game.status[0].0);
有没有办法按以下方式进行?像Game.status[0].0
之类的东西会让我的生活变得更轻松。当然还有其他方法,但这种方式更受欢迎。
答案 0 :(得分:98)
JSON只允许键名作为字符串。这些字符串可以包含数值。
你不是在使用JSON。你有一个JavaScript对象文字。您可以使用密钥标识符,但标识符不能以数字开头。你仍然可以使用字符串。
var Game={
"status": [
{
"0": "val",
"1": "val",
"2": "val"
},
{
"0": "val",
"1": "val",
"2": "val"
}
]
}
如果使用点符号访问属性,则必须使用标识符。请使用方括号表示法:Game[0][0]
。
但鉴于这些数据,数组似乎更有意义。
var Game={
"status": [
[
"val",
"val",
"val"
],
[
"val",
"val",
"val"
]
]
}
答案 1 :(得分:5)
可能你需要一个阵列?
var Game = {
status: [
["val", "val","val"],
["val", "val", "val"]
]
}
alert(Game.status[0][0]);
答案 2 :(得分:5)
首先,它不是JSON:JSON要求所有键都必须是字符串。
其次,常规数组可以满足您的需求:
var Game = {
status: [
[
"val",
"val",
"val"
],
[
"val",
"val",
"val"
]
}
}
如果您使用Game.status[0][0]
,将有效。您不能使用带点符号(.0
)的数字。
或者,您可以引用数字(即{ "0": "val" }...
);你将使用普通对象而不是数组,但相同的语法将起作用。
答案 3 :(得分:3)
当Javascript对象属性的名称不以下划线或字母开头时,您不能使用点表示法(如Game.status[0].0
),而必须使用备用表示法,Game.status[0][0]
。
一个不同的注意事项,你真的需要它成为状态数组中的一个对象吗?如果你像对象一样使用对象,为什么不使用真正的数组?
答案 4 :(得分:0)
怎么样?
Game.status[0][0] or Game.status[0]["0"] ?
其中一个有用吗?
PS:你的问题是Javascript对象,而不是JSON。 JSON是Javascript对象的“字符串”版本。
答案 5 :(得分:0)
JSON将键类型调整为字符串。目的是支持点表示法来访问对象的成员。
例如,人= {“身高”:170,“体重”:60,“年龄”:32}。您可以按person.height,person.weight等访问成员。如果JSON支持值键,则其外观类似于person.0,person.1,person.2。
答案 6 :(得分:0)
JSON是“ JavaScript对象表示法”。 JavaScript指定其键必须为字符串或符号。
以下MDN Docs中的引号使用术语“键/属性”来指代我经常听到的“键/值”。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Objects
在JavaScript中,对象可以看作是属性的集合。使用对象文字语法,可以初始化一组有限的属性;然后可以添加和删除属性。属性值可以是任何类型的值,包括其他对象,从而可以构建复杂的数据结构。使用键值标识属性。键值可以是字符串值或符号值。