Как преобразовать объект 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
Cheating ->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

@ user1960311 Это то , что вы есть сейчас
Ian

57

Если у вас есть правильно сформированная строка JSON, вы сможете сделать

var as = JSON.parse(jstring);

Я все время так делаю при передаче массивов через AJAX.


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

17
Кажется, это возвращает объект, но не массив. Правильно ?
Феру

2
Он вернет любой объект или коллекцию объектов, которые вы сериализовали.
Agaton

ИМО, это лучший ответ, чем тот, который был принят.
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).
Мика Сандленд

@ Шивам, ты нашел это полезным?
CCC
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.