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

IT技术 javascript json identifier
2021-02-09 21:19:08

最近开始研究 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会让我的生活更轻松。当然还有其他方法可以解决,但这种方法是首选。

6个回答

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

不过,您没有使用 JSON。您有一个 JavaScript 对象字面量。可以为键使用标识符,但标识符不能以数字开头。不过你仍然可以使用字符串。

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

如果您使用点符号访问属性,则必须使用标识符。改用方括号表示法:Game.status[0][0]

但鉴于这些数据,数组似乎更有意义。

var Game={
    "status": [
        [
            "val",
            "val",
            "val"
        ],
        [
            "val",
            "val",
            "val"
        ]
    ]
}
@Quentin,JSON 和 JS 对象文字之间You aren't using JSON though. You have a JavaScript object literal. 的唯一区别是var =还是有更多区别?JS 对象基本上是 JSON 存储在变量中吗?
2021-03-26 21:19:08
这仍然不允许你做 Game.status[0].0
2021-04-04 21:19:08
@OriginalSyn 不可能有“Game.status[0].0”,因为如果您想使用点符号,Javascript 只允许属性名称以字母或下划线开头。没有办法解决这个问题。
2021-04-08 21:19:08
不,但会允许Game.status[0][0].
2021-04-10 21:19:08
非常感谢您的回答,正是我正在寻找的。老实说,我不知道为什么我没有想到一个数组开始 - 我会把它归咎于大脑冻结。
2021-04-12 21:19:08

首先,它不是 JSON:JSON 要求所有键都必须是字符串。

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

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

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

或者,您可以引用数字(即{ "0": "val" }...);您将使用普通对象而不是数组,但相同的语法也可以使用。

可能你需要一个数组?

var Game = {

    status: [
        ["val", "val","val"],
        ["val", "val", "val"]
    ]
}

alert(Game.status[0][0]);

如果 Javascript 对象属性的名称既不以下划线也不以字母开头,则不能使用点表示法(如Game.status[0].0),而必须使用替代表示法,即Game.status[0][0].

一个不同的注意事项,你真的需要它成为状态数组中的一个对象吗?如果您像使用数组一样使用对象,为什么不使用真正的数组呢?

JSON 将密钥类型规定为字符串。目的是支持点符号来访问对象的成员。

例如,person = {"height":170, "weight":60, "age":32}。您可以通过 person.height、person.weight 等访问成员。如果 JSON 支持值键,那么它看起来像 person.0、person.1、person.2。

我不明白 person.1、person.2 等有什么问题?
2021-03-19 21:19:08