Récemment commencé à creuser dans JSON, et j'essaie actuellement d'utiliser un nombre comme "identifiant", ce qui ne fonctionne pas très bien. foo:"bar"
fonctionne bien, alors 0:"bar"
que non.
var Game = {
status: [
{
0:"val",
1:"val",
2:"val"
},
{
0:"val",
1:"val",
2:"val"
}
]
}
alert(Game.status[0].0);
Y a-t-il un moyen de le faire de la manière suivante? Quelque chose comme Game.status[0].0
ça me faciliterait la vie. Bien sûr, il y a d'autres façons de contourner cela, mais cette méthode est préférée.
Game.status[0]
un tableau? Alors votre syntaxe seraitGame.status[0][0]
.Réponses:
JSON autorise uniquement les noms de clés à être des chaînes. Ces chaînes peuvent être constituées de valeurs numériques.
Cependant, vous n'utilisez pas JSON. Vous avez un objet JavaScript littéral. 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.
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 de crochets à la place:
Game.status[0][0]
.Mais étant donné ces données, un tableau semble avoir plus de sens.
var Game={ "status": [ [ "val", "val", "val" ], [ "val", "val", "val" ] ] }
la source
Game.status[0].0
Game.status[0][0]
.You aren't using JSON though. You have a JavaScript object literal.
La seule différence est-ellevar =
ou y a-t-il plus de différences entre JSON et un littéral d'objet JS? Un objet JS est-il essentiellement JSON stocké dans une variable?Tout d'abord, ce n'est pas JSON: JSON exige que toutes les clés doivent être 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 nombres (ie
{ "0": "val" }...
); vous aurez des objets simples au lieu de tableaux, mais la même syntaxe fonctionnera.la source
Vous avez probablement besoin d'un tableau?
var Game = { status: [ ["val", "val","val"], ["val", "val", "val"] ] } alert(Game.status[0][0]);
la source
Lorsque le nom d'une propriété d'objet Javascript ne commence ni par un trait de soulignement ni par une lettre, vous ne pouvez pas utiliser la notation par points (comme
Game.status[0].0
), et vous devez utiliser la notation alternative, qui estGame.status[0][0]
.Une note différente, avez-vous vraiment besoin que ce soit un objet dans le tableau d'état? Si vous utilisez l'objet comme un tableau, pourquoi ne pas utiliser un vrai tableau à la place?
la source
JSON règle le type de clé comme une chaîne. Le but est de prendre en charge la notation par points pour accéder aux membres de l'objet.
Par exemple, personne = {"hauteur": 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, alors cela ressemblerait à person.0, person.1, person.2.
la source
Qu'en est-il de
Game.status[0][0] or Game.status[0]["0"] ?
Est-ce que l'un de ceux-ci 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.
la source
JSON est la "notation d'objet JavaScript". JavaScript spécifie que ses clés doivent être des chaînes ou des symboles.
La citation suivante de MDN Docs utilise les termes «clé / propriété» pour désigner ce que j'entends plus souvent appelé «clé / valeur».
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Objects
la source