web-dev-qa-db-fra.com

Utilisation du nombre comme "index" (JSON)

Récemment commencé à creuser dans JSON, et j'essaie actuellement d'utiliser un nombre comme "identificateur", ce qui ne fonctionne pas très bien. foo:"bar" fonctionne bien, alors que 0:"bar" ne fonctionne pas. 

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

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

Est-il possible de le faire de la manière suivante? Quelque chose comme Game.status[0].0 rendrait ma vie beaucoup plus facile. Bien sûr, il existe d'autres moyens de contourner le problème, mais ce moyen est préférable.

59
Zar

JSON n'autorise que les noms de clé à être des chaînes. Ces chaînes peuvent être constituées de valeurs numériques.

Vous n'utilisez pas JSON cependant. Vous avez un littéral d'objet JavaScript. Vous pouvez utiliser des identifiants pour les clés, mais un identifiant ne peut pas commencer par un nombre. Vous pouvez toujours utiliser des chaînes cependant.

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

Si vous accédez aux propriétés avec la notation par points, vous devez utiliser des identificateurs. Utilisez la notation entre crochets à la place: Game[0][0].

Mais étant donné ces données, un tableau semblerait plus logique.

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

Tout d'abord, ce n'est pas JSON: JSON impose que toutes les clés soient des chaînes.

Deuxièmement, les tableaux réguliers font ce que vous voulez:

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

fonctionnera si vous utilisez Game.status[0][0]. Vous ne pouvez pas utiliser de nombres avec la notation par points (.0).

Alternativement, vous pouvez citer les chiffres (c.-à-d. { "0": "val" }...); vous aurez des objets simples au lieu de tableaux, mais la même syntaxe fonctionnera.

5
Amadan

Vous avez probablement besoin d'un tableau?

var Game = {

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

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

Lorsque le nom d'une propriété d'objet Javascript ne commence pas par un trait de soulignement ou une lettre, vous ne pouvez pas utiliser la notation à point (telle que Game.status[0].0), et vous devez utiliser la notation alternative, à savoir Game.status[0][0]

Une note différente, avez-vous vraiment besoin que ce soit un objet dans le tableau de statut? Si vous utilisez l'objet comme un tableau, pourquoi ne pas utiliser un vrai tableau à la place?

3
zatatatata

Qu'en est-il de 

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

Est-ce que l'un d'eux fonctionne?

PS: Ce que vous avez dans votre question est un objet Javascript, pas JSON. JSON est la version 'chaîne' d'un objet Javascript.

0
Willem Mulder

JSON régule le type de clé sur string. Le but est de supporter la notation par points pour accéder aux membres de l'objet. 

Par exemple, personne = {"taille": 170, "poids": 60, "âge": 32}. Vous pouvez accéder aux membres par person.height, person.weight, etc. Si JSON prend en charge les clés de valeur, il ressemblera à person.0, person.1, person.2. 

0
Huiguorou