使用数字作为“索引”(JSON)
最近开始挖掘到JSON,并且我正在尝试使用一个数字作为“标识符”,这种方法效果不佳。 foo:"bar"
工作正常,而0:"bar"
没有。使用数字作为“索引”(JSON)
var Game = {
status: [
{
0:"val",
1:"val",
2:"val"
},
{
0:"val",
1:"val",
2:"val"
}
]
}
alert(Game.status[0].0);
有没有办法按照以下方式做到这一点?像Game.status[0].0
会让我的生活更轻松。当然,还有其他方法,但这种方式是首选。
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"
]
]
}
这仍然不允许你做'Game.status [0] .0' – JaredMcAteer 2012-01-06 13:48:29
不,但会允许'Game.status [0] [0]'。 – Amadan 2012-01-06 13:49:00
@OriginalSyn不可能拥有'Game.status [0] .0',因为如果你想使用点符号,Javascript只允许属性名以字母或下划线开头。这是没有办法的。 – zatatatata 2012-01-06 13:52:56
什么
Game.status[0][0] or Game.status[0]["0"] ?
做这些工作呢?
PS:在你的问题中你有什么是一个Javascript对象,而不是JSON。 JSON是Javascript对象的'字符串'版本。
“JSON是Javascript对象的'字符串'版本。”那是不正确的。 JSON对象是JavaScript对象的子集。否则,你是正确的是JavaScript对象,因为它不符合JSON规范 – JaredMcAteer 2012-01-06 13:47:19
JSON是JavaScript *对象文字符号*的子集,而JSON对象是可以用JSON表示的数据类型。 – Quentin 2012-01-06 13:51:42
@OriginalSyn:呃,不是。 JSON是一种“可互换”格式,用作与语言无关的字符串格式。大多数语言都可以解析JSON,而在Javascript中,它会变成一个Javascript对象。请参阅http://benalman.com/news/2010/03/theres-no-such-thing-as-a-json/。 – 2012-01-06 13:59:08
可能您需要一个数组?
var Game = {
status: [
["val", "val","val"],
["val", "val", "val"]
]
}
alert(Game.status[0][0]);
首先,它不是JSON:JSON要求所有的键必须是字符串。
其次,定期阵列做你想做的:
var Game = {
status: [
[
"val",
"val",
"val"
],
[
"val",
"val",
"val"
]
}
}
会的工作,如果你使用Game.status[0][0]
。您不能使用带点号的数字(.0
)。
或者,您可以引用数字(即{ "0": "val" }...
);您将拥有普通对象而不是阵列,但是相同的语法将起作用。
当一个Javascript对象属性的名称不与下划线或字母开头,你不能使用点符号(如Game.status[0].0
),你必须使用替代的符号,这是Game.status[0][0]
。
一个不同的说明,你真的需要它是状态数组内的一个对象吗?如果你像使用数组一样使用对象,为什么不使用真正的数组呢?
原因是,在JavaScript中,与其他许多语言一样,属性的/变量的名称不能以数字开头,但只能使用$,_,a-z和A-Z。为什么Game.status [0]不是数组?那么你的语法就是'Game.status [0] [0]'。 – 2012-01-06 13:50:48