web-dev-qa-db-fra.com

Accéder aux éléments de l'objet json comme un tableau

Dupliquer possible:
J'ai une structure de données imbriquée/JSON, comment puis-je accéder à une valeur spécifique?

J'ai un objet json, comme celui ci-dessous:

[
  ["Blankaholm", "Gamleby"],
  ["2012-10-23", "2012-10-22"],
  ["Blankaholm. Under natten har det varit inbrott", "E22 i med Gamleby. Singelolycka. En bilist har.],
  ["57.586174","16.521841"], ["57.893162","16.406090"]
]

Il se compose de 4 "niveaux de propriété" (ville, date, description et coordonnées).

Ce que je veux faire, c'est pouvoir accéder à ces niveaux comme dans un tableau comme ceci:

var coordinates = jsonObject[4];

Cela ne fonctionne évidemment pas, alors ma question est: comment puis-je le faire?

Dois-je le décoder ou quelque chose d'autre, et si oui comment?

11
holyredbeard

J'ai trouvé un moyen simple de résoudre ce problème, avec l'utilisation de JSON.parse.

Supposons que le json ci-dessous est à l'intérieur de la variable jsontext .

[
  ["Blankaholm", "Gamleby"],
  ["2012-10-23", "2012-10-22"],
  ["Blankaholm. Under natten har det varit inbrott", "E22 i med Gamleby. Singelolycka. En bilist har.],
  ["57.586174","16.521841"], ["57.893162","16.406090"]
]

La solution est la suivante:

var parsedData = JSON.parse(jsontext);

Maintenant, je peux accéder aux éléments de la manière suivante:

var cities = parsedData[0];
23
holyredbeard

Le your semble être un multi-tableau, pas un objet JSON.

Si vous souhaitez accéder à l'objet comme un tableau, vous devez utiliser une sorte de clé/valeur, telle que:

var JSONObject = {
  "city": ["Blankaholm, "Gamleby"],
  "date": ["2012-10-23", "2012-10-22"],
  "description": ["Blankaholm. Under natten har det varit inbrott", "E22 i med Gamleby. Singelolycka. En bilist har.],
  "lat": ["57.586174","16.521841"], 
  "long": ["57.893162","16.406090"]
}

et y accéder avec:

JSONObject.city[0] // => Blankaholm
JSONObject.date[1] // => 2012-10-22

and so on...

ou

JSONObject['city'][0] // => Blankaholm
JSONObject['date'][1] // => 2012-10-22

and so on...

ou, en dernier recours, si vous ne voulez pas changer votre structure, vous pouvez faire quelque chose comme ça:

var JSONObject = {
  "data": [
    ["Blankaholm, "Gamleby"],
    ["2012-10-23", "2012-10-22"],
    ["Blankaholm. Under natten har det varit inbrott", "E22 i med Gamleby. Singelolycka. En bilist har.],
    ["57.586174","16.521841"], 
    ["57.893162","16.406090"]
  ]
}

JSONObject.data[0][1] // => Gambleby
4
Ragnarokkr

J'ai remarqué quelques erreurs de syntaxe, mais à part ça, ça devrait marcher:

var arr = [
  ["Blankaholm", "Gamleby"],
  ["2012-10-23", "2012-10-22"],
  ["Blankaholm. Under natten har det varit inbrott", "E22 i med Gamleby. Singelolycka. En bilist har."], //<- syntax error here
  ["57.586174","16.521841"], ["57.893162","16.406090"]
];


console.log(arr[4]);    //["57.893162","16.406090"]
console.log(arr[4][0]); //57.893162
2
Jeffrey Sweeney
var coordinates = [jsonObject[3][0], 
                   jsonObject[3][0],
                   jsonObject[4][1], 
                   jsonObject[4][1]];
0
Paolo