[英]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);
如果你有一個格式良好的 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));
這個函數是上面兩個的混合:
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.