簡體   English   中英

如何將 JSON 對象轉換為 JavaScript 數組?

[英]How to convert JSON object to JavaScript array?

我需要將 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]
]);

我怎樣才能做到這一點?

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/

如果你有一個格式良好的 JSON 字符串,你應該能夠做到

var as = JSON.parse(jstring);

我在通過 AJAX 傳輸數組時一直這樣做。

假設你有:

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

您可以通過以下方式獲取值(幾乎所有瀏覽器版本都支持):

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

或者干脆:

Object.values(j)

輸出:

["1", "2", "3", "4"]
function json2array(json){
    var result = [];
    var keys = Object.keys(json);
    keys.forEach(function(key){
        result.push(json[key]);
    });
    return result;
}

看到這個完整的解釋: http : //book.mixu.net/node/ch5.html

這將解決問題:

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]]
*/

您可以像這樣將對象項插入到數組中

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

const json = '{"result":true, "count":42}';
const obj = JSON.parse(json);

console.log(obj.count);
// expected output: 42

console.log(obj.result);
// expected output: true

考慮有一個我們想要轉換的 json 對象

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

您可以使用多種解決方案:

1. Object.keys()Object.values()

這些函數將任何對象轉換為數組。 一個返回一個包含所有鍵的數組,另一個返回所有值:

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

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

我不確定是否理解最初的問題,但解決方案可能是

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

2. Object.entries()

這個函數是上面兩個的混合:

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

它對最初的問題沒有用,但是這個功能非常有用,我不得不提一下。 特別是當value_是嵌套對象時。 假設我們的值是這樣的對象:

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

我們希望以這樣的數組結束

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

我們需要使用Object.entries()來獲取我們所有的鍵及其值。 我們將從一個過於詳細的代碼開始:

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"}
//]

我們可以利用擴展運算符來簡化我們的代碼:

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"}
//]

對@Mister Aqua 的解決方案的一些更正

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

清涼丸 :)

如果目標是創建一個對象數組,這里有一個解決方案,可以使用 Object.keys() 和 Object.values() 完成您嘗試做的事情:

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, i) => data.push({[key]: Object.values(obj)[i]}))

或使用 Object.entries()

Object.entries(obj).forEach((array, index) => data.push({[array[0]]: array[1]}))

就這么簡單!

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM