Недавно начал копаться в 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
Сделало бы мою жизнь проще. Конечно, есть и другие способы обойти это, но этот способ предпочтительнее.
Game.status[0]
массив? Тогда ваш синтаксис будетGame.status[0][0]
.Ответы:
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" ] ] }
источник
Game.status[0].0
Game.status[0][0]
.You aren't using JSON though. You have a JavaScript object literal.
разница только в томvar =
или больше различий между JSON и литералом объекта JS? Является ли объект JS в основном JSON хранимым в переменной?Во-первых, это не 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 = {"рост": 170, "вес": 60, "возраст": 32}. Вы можете получить доступ к членам по person.height, person.weight и т. Д. Если JSON поддерживает ключи значений, то он будет выглядеть как person.0, person.1, person.2.
источник
Что о
Game.status[0][0] or Game.status[0]["0"] ?
Один из них работает?
PS: В вашем вопросе есть объект Javascript, а не JSON. JSON - это строковая версия объекта Javascript.
источник
JSON - это «нотация объектов JavaScript». JavaScript указывает, что его ключи должны быть строками или символами.
Следующая цитата из MDN Docs использует термины «ключ / свойство» для обозначения того, что я чаще слышу как «ключ / значение».
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Objects
источник