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

时间:2012-01-06 13:42:46

标签: javascript json identifier

最近开始深入研究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之类的东西会让我的生活变得更轻松。当然还有其他方法,但这种方式更受欢迎。

7 个答案:

答案 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中,对象可以看作是属性的集合。使用对象文字语法,可以初始化一组有限的属性;然后可以添加和删除属性。属性值可以是任何类型的值,包括其他对象,从而可以构建复杂的数据结构。使用键值标识属性。键值可以是字符串值或符号值。