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 ?

8voto

NuOne T Attygalle Points 847

Vous pouvez insérer des éléments d'objets dans un tableau comme ceci

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

 console.log(Object.keys(obj2).map(key => [key, obj2[key]]))

let obj = {
  '1st': {
    name: 'stackoverflow'
  },
  '2nd': {
    name: 'stackexchange'
  }
};

// you can use Object.values(obj)
console.log(Object.values(obj))

// or you can use this instead. 
 let wholeArray = Object.keys(obj).map(key => obj[key]);

 console.log(wholeArray);
 console.log(Object.values(obj));

3voto

Dylan Prem Points 44

Si l'objectif est de créer un tableau d'objets, voici une solution qui permettra d'accomplir ce que vous essayez de faire en utilisant Object.keys() :

const jsonResponse = '{"2013-01-21":1,"2013-01-22":7}'
// Only use json parse if the data is a JSON string.
const obj = typeof jsonResponse === 'string' ? JSON.parse(jsonResponse) : jsonResponse;
const data = [];

Object.keys(obj).forEach((key) => data.push({[key]: obj[key]}))
// Example 2 - storing it directly in a variable using map
const arrayOfObjs = Object.keys(obj).map((key) => ({[key]: obj[key]}))

Ou en utilisant Object.entries()

// Example 1
Object.entries(obj).forEach((array) => data.push({[array[0]]: array[1]}))
// Example 2
Object.entries(obj).forEach(([key, value]) => data.push({[key]: value}))
// Example 3 - Store it directly in a new variable using map
const arrayOfObjs = Object.entries(obj).map(([key, value]) => ({[key]: value}))

2voto

Mister Aqua Points 103

Considérons que nous avons un objet json que nous voulons convertir

const my_object = {
    "key1": "value1",
    "key2": "value2",
    "key3": "value3"
}

Il existe plusieurs solutions que vous pouvez utiliser :

1. Objet.keys() y Objet.valeurs()

Ces fonctions convertissent n'importe quel objet en un tableau. L'une retourne un tableau avec toutes les clés, et l'autre toutes les valeurs :

console.log(Object.keys(my_object))
// Output : ["key1", "key2", "key3"]

console.log(Object.values(my_object))
// Output : ["value1", "value2", "value3"]

Je ne suis pas sûr de comprendre la question initiale, mais la solution serait probablement la suivante

data.addRows(Object.values(my_object));

2. Objet.entries()

Cette fonction est un mélange des deux précédentes :

console.log(Object.entries(my_object))
// Output : [["key1", "value1"],  ["key2", "value2"],  ["key3", "value3"]]

Il n'est pas utile pour la question initiale, mais cette fonction est si utile que je devais la mentionner. Surtout, lorsque le Valeur sont des objets imbriqués. Disons que nos valeurs sont des objets comme ceci :

const my_object = {
    "key1": {"a": 1, "b": 2},
    "key2": {"y": 25, "z": 26},
    "key3": {"much": "stuff"}
}

et nous voulons nous retrouver avec un tableau comme celui-ci

my_array = [
    {"key": "key1", "a": 1, "b": 2},
    {"key": "key2", "y": 25, "z": 26},
    {"key": "key3", "much": "stuff"}
]

Nous devons utiliser Object.entries() pour obtenir toutes nos clés avec leur valeur. Nous allons commencer par un code trop détaillé :

my_array = Object.entries(my_object).map(function(entry){
   key = entry[0];
   value = entry[1];

   nested_object = value;
   nested_object.key = key;

   return nested_object;
});

console.log(my_array);
// Expected output : [
//    {"key": "key1", "a": 1, "b": 2},
//    {"key": "key2", "y": 25, "z": 26},
//    {"key": "key3", "much": "stuff"}
//]

Nous pouvons utiliser opérateur de diffusion pour simplifier notre code :

my_array = Object.entries(my_object).map(entry => {"key": entry[0], ...entry[1]});

console.log(my_array);
// Expected output : [
//    {"key": "key1", "a": 1, "b": 2},
//    {"key": "key2", "y": 25, "z": 26},
//    {"key": "key3", "much": "stuff"}
//]

2voto

Ali Akram Points 601

Quelques corrections à l'article de @Mister Aqua SOLUTION

const my_array = [];
    Object.entries(set_of_objects).map(function (entry) {
      const key = entry[0];
      const value = entry[1];

      const nested_object = {};

      nested_object[key] = value;
      my_array.push(nested_object);
    });

Chill Pill :)

1voto

M9J_cfALt Points 167

J'ai obtenu cette erreur lorsque j'ai placé ma longue chaîne JSON dans un div caché et ensuite essayé de la convertir en JSON avec ce code-

var data = document.getElementById('data');
var json = JSON.parse(data);

Vous avez déjà repéré une erreur ? oui, j'ai oublié d'ajouter .innerHTML dans la première ligne. Les données sont donc déjà un objet et non une chaîne de caractères. Comment un objet peut-il être analysé par JSON.parse ?

JSON.parse est conçu pour analyser des chaînes de caractères, et non des objets.

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