Jak przekonwertować obiekt JSON na tablicę JavaScript?

86

Muszę przekonwertować ciąg obiektu JSON na tablicę JavaScript.

To mój obiekt JSON:

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

I chcę mieć:

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

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

Jak mogę to osiągnąć?

user1960311
źródło
2
Oszukiwanie ->string.split(',')
adeneo
2
@adeneo chce mieć tablicę w tablicy, z Twoją metodą będzie to tylko jedna tablica
salexch

Odpowiedzi:

86
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/

salexch
źródło
Chciałbym coś takiego: 2013-01-21 ==> 1 2013-01-22 ==> 7 (jak hashtable)
user1960311
@ user1960311 To, co masz teraz
Ian
57

Jeśli masz dobrze sformułowany ciąg JSON, powinieneś być w stanie to zrobić

var as = JSON.parse(jstring);

Robię to cały czas podczas przesyłania tablic przez AJAX.

aggaton
źródło
3
+1 dla JSON.parse (). W tym momencie ma szeroką obsługę przeglądarek: caniuse.com/json
siliconrockstar
17
Wydaje się, że zwraca obiekt, ale nie tablicę. Dobrze ?
Feru,
2
Zwróci dowolny obiekt lub kolekcję obiektów serializowanych.
aggaton
IMO to lepsze odpowiedzi, a potem zadziałało.
simhumileco
32

Załóżmy, że masz:

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

Możesz uzyskać wartości za pomocą (obsługiwane w praktycznie wszystkich wersjach przeglądarek):

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

lub po prostu:

Object.values(j)

Wynik:

["1", "2", "3", "4"]
mvallebr
źródło
7
Ktokolwiek to czyta ... Zamiast tego użyj Object.values !
Nico Van Belle
1
Pamiętaj tylko, że Object.values ​​() nie jest obsługiwana w żadnej wersji IE
A Friend
24
function json2array(json){
    var result = [];
    var keys = Object.keys(json);
    keys.forEach(function(key){
        result.push(json[key]);
    });
    return result;
}

Zobacz pełne wyjaśnienie: http://book.mixu.net/node/ch5.html

Roger Garzon Nieto
źródło
6
To nie chroni kluczy.
Jake N,
16

To rozwiąże problem:

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);

Lub używając metody Object.entries () :

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

W obu przypadkach wynik będzie następujący:

/* output: 
[['2013-01-21', 1], ['2013-01-22', 7]]
*/
Rakesh Sharma
źródło
3

W ten sposób możesz wstawiać elementy obiektów do tablicy

let obj = {
  '1st': {
    name: 'stackoverflow'
  },
  '2nd': {
    name: 'stackexchange'
  }
};
 
 let wholeArray = Object.keys(obj).map(key => obj[key]);
 
 console.log(wholeArray);

NuOne
źródło
-6

To takie proste!

var json_data = {"2013-01-21":1,"2013-01-22":7};
var result = [json_data];
console.log(result);
CCC
źródło
1
To tworzy tablicę z jednym obiektem w środku (obiekt danych json).
Mika Sundland
@ Shivam, uznałeś to za pomocne?
CCC