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

6   55   2012-01-06 17:42:46

6 ответов:

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

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

var Game = {

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

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

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

во-вторых, обычные массивы делают то, что вы хотите:

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

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

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

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

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

а как же

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

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

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

JSON регулирует тип ключа, чтобы быть строкой. Цель состоит в том, чтобы поддержать точечную нотацию для доступа к членам объекта.

например, person = {"рост": 170,"вес": 60,"Возраст": 32}. Вы можете получить доступ к членам человека.рост, человек.вес и т. д. Если JSON поддерживает ключи значений, то он будет выглядеть как person.0, человек.1, человек.2.