137 votes

Comment convertir un objet JSON en tableau JavaScript ?

Je dois convertir une chaîne d'objets JSON en un tableau JavaScript.

C'est mon objet JSON :

{"2013-01-21":1,"2013-01-22":7}

Et je veux avoir :

var data = new google.visualization.DataTable();
data.addColumn('string', 'Topping');
data.addColumn('number', 'Slices');

data.addRows([
    ['2013-01-21', 1],
    ['2013-01-22', 7]
]);

Comment puis-je y parvenir ?

128voto

salexch Points 966
var json_data = {"2013-01-21":1,"2013-01-22":7};
var result = [];

for(var i in json_data)
    result.push([i, json_data [i]]);

var data = new google.visualization.DataTable();
data.addColumn('string', 'Topping');
data.addColumn('number', 'Slices');
data.addRows(result);

http://jsfiddle.net/MV5rj/

98voto

aggaton Points 183

Si vous avez une chaîne JSON bien formée, vous devriez pouvoir faire

var as = JSON.parse(jstring);

Je fais cela tout le temps lorsque je transfère des tableaux par AJAX.

64voto

mvallebr Points 436

Supposons que vous ayez :

var j = {0: "1", 1: "2", 2: "3", 3: "4"};

Vous pouvez obtenir les valeurs avec (supporté dans pratiquement toutes les versions de navigateur) :

Object.keys(j).map(function(_) { return j[_]; })

ou simplement :

Object.values(j)

Sortie :

["1", "2", "3", "4"]

29voto

Roger Garzon Nieto Points 1006
function json2array(json){
    var result = [];
    var keys = Object.keys(json);
    keys.forEach(function(key){
        result.push(json[key]);
    });
    return result;
}

Voir cette explication complète : http://book.mixu.net/node/ch5.html

25voto

Rakesh Sharma Points 383

Cela résoudra le problème :

const json_data = {"2013-01-21":1,"2013-01-22":7};

const arr = Object.keys(json_data).map((key) => [key, json_data[key]]);

console.log(arr);

Ou en utilisant Objet.entries() méthode :

console.log(Object.entries(json_data));

Dans les deux cas, la sortie sera :

/* output: 
[['2013-01-21', 1], ['2013-01-22', 7]]
*/

Les solutions ci-dessus ne fonctionnent pas pour les objets imbriqués. Pour les objets imbriqués, nous pouvons faire quelque chose comme ceci :

const isObject = (obj) => {
  return typeof obj === 'object' && !Array.isArray(obj) && obj !== null;
}

const objToArray = (obj) => {
  return Object.keys(obj).map((key) => {
    return [
      key, isObject(obj[key]) ? 
        objToArray(obj[key]) :
        obj[key]
    ];
  });    
}

const json_data = {
  "2013-01-21":1, 
  "2013-01-22":7,
  "ab":{"x":{"xa": 3, "xb": 4}, "y": 2},
};

console.log(JSON.stringify(objToArray(json_data)));

La sortie dans ce cas sera :

/* output: 
[["2013-01-21",1],["2013-01-22",7],["ab",[["x",[["xa",3],["xb",4]]],["y",2]]]]
*/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X