Подтвердить что ты не робот

Используя число как "индекс" (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 Сделало бы мою жизнь проще. Конечно, есть и другие пути, но этот путь является предпочтительным.

4b9b3361

Ответ 1

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

Ответ 2

Возможно, вам нужен массив?

var Game = {

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

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

Ответ 3

Во-первых, это не JSON: JSON гарантирует, что все ключи должны быть строками.

Во-вторых, регулярные массивы делают то, что вы хотите:

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

будет работать, если вы используете Game.status[0][0]. Вы не можете использовать числа с точечной нотацией (.0).

В качестве альтернативы вы можете указать числа (т.е. { "0": "val" }...); у вас будут простые объекты вместо массивов, но тот же синтаксис будет работать.

Ответ 4

Если имя свойства объекта Javascript не начинается ни с подчеркиванием, ни с буквой, вы не можете использовать точечную нотацию (например, Game.status[0].0), а должны использовать альтернативные обозначения, которые Game.status[0][0].

Одно замечание, вам действительно нужно, чтобы он был объектом внутри массива состояния? Если вы используете объект как массив, почему бы вам не использовать реальный массив?

Ответ 5

Что насчет

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

Работает ли один из них?

PS: У вас в вашем вопросе есть объект Javascript, а не JSON. JSON является "строковой" версией объекта Javascript.