Як перетворити об'єкт JSON на масив JavaScript?


86

Мені потрібно перетворити рядок об’єкта JSON у масив JavaScript.

Це мій об’єкт JSON:

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

І я хочу мати:

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

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

Як я можу цього досягти?


2
Обман ->string.split(',')
adeneo

2
@adeneo він хоче масив у масиві, з вашим методом це буде лише один масив
salexch

Відповіді:


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/


Я хотів би приблизно такого: 2013-01-21 ==> 1 2013-01-22 ==> 7 (як хеш-
таблиця

@ user1960311 Ось що у вас зараз
Ян

57

Якщо у вас є добре сформований рядок JSON, ви можете це зробити

var as = JSON.parse(jstring);

Я роблю це постійно, передаючи масиви через AJAX.


3
+1 для JSON.parse (). На даний момент він має широку підтримку браузера: caniuse.com/json
siliconrockstar

17
Здається, це повертає об’єкт, але не масив. Правда?
Feru

2
Він поверне будь-який об’єкт або колекцію об’єктів, які ви серіалізували.
аггатон

ІМО цей кращий відповідь тоді прийняв.
simhumileco

33

Припустимо, у вас є:

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

Ви можете отримати значення за допомогою (підтримується практично у всіх версіях браузера):

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

або просто:

Object.values(j)

Вихід:

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

7
Хто читає це ... Натомість використовуйте Object.values !
Ніко Ван Белль

1
Тільки пам’ятайте, що Object.values ​​() не підтримується жодною версією IE
A Friend


16

Це вирішить проблему:

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

Або за допомогою методу Object.entries () :

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

В обох випадках результат буде:

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

3

Ви можете вставити об'єкти в масив як такий

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


-6

Так просто!

var json_data = {"2013-01-21":1,"2013-01-22":7};
var result = [json_data];
console.log(result);

1
Це робить масив з одним об’єктом усередині нього (об’єктом даних json).
Mika Sundland

@ Shivam, знайшов це корисним?
CCC
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.