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