使用数字作为“索引”(JSON)

最近开始挖掘到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会使我的生活方式更容易。 当然,还有其他的方法,但这种方式是首选。

JSON只允许键名是string。 这些string可以由数值组成。

你不使用JSON。 你有一个JavaScript对象文字。 您可以使用密钥标识符,但标识符不能以数字开头。 你仍然可以使用string。

 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" ] ] } 

可能你需要一个数组?

 var Game = { status: [ ["val", "val","val"], ["val", "val", "val"] ] } alert(Game.status[0][0]); 

首先,它不是JSON:JSON要求所有的键必须是string。

其次,常规数组做你想要的:

 var Game = { status: [ [ "val", "val", "val" ], [ "val", "val", "val" ] } } 

将工作,如果你使用Game.status[0][0] 。 您不能使用点号( .0 )的数字。

或者,你可以引用数字(即{ "0": "val" }... ); 你将有简单的对象,而不是arrays,但相同的语法将工作。

当一个Javascript对象属性的名字不是以下划线或者字母开头时,你不能使用点符号(比如Game.status[0].0 ),并且你必须使用替代符号,即Game.status[0][0]

一个不同的说明,你真的需要它是状态数组内的一个对象吗? 如果你像一个数组一样使用对象,为什么不用一个真正的数组呢?

关于什么

 Game.status[0][0] or Game.status[0]["0"] ? 

其中一个工作?

PS:你有什么问题是一个Javascript对象,而不是JSON。 JSON是Javascript对象的“string”版本。