我有一个来自我的api的Json对象,
{
"user1": ["report_dev", "report_test"],
"user2": ["output1", "output2", "output3", "output4"]
}
我想将此转换为以下格式:
[{ name: 'user1' }, { name: 'user2' }];
这必须足够简单,但是不确定。我是否必须遍历json并创建自定义的。
我尝试使用下面的代码,但这没有给出预期的结果:
var array =[];
for (i in array1)
{
//array1 holds the json object
array.push('name', array1[i]]);
}
感谢您的关注。
已更新:
details1:
user1: (2) ["report_dev", "report_test"]
user2: (4) ["output1", "output2", "output3", "output4"]
details2:
user1: (2) ["report_dev", "report_test"]
user2: (4) ["output1", "output2", "output3", "output4"]
答案 0 :(得分:2)
您可以按照Nick Parsons的建议迭代到从API收到的json:
const fetchedData = {"user1":["report_dev", "report_test"], "user2": ["output1", "output2", "output3", "output4"]}
const result = Object.keys(fetchedData).map((key) => {
return {
name: key,
data: fetchedData[key],
}
})
console.log(result)
答案 1 :(得分:1)
您的方法当前不起作用,因为您尝试将两个值作为单独的项目/元素推入数组。您想要.push()
一个对象,该对象代表所需格式的输出数组中的对象:
var array = [];
for (i in array1) { // array1 holds the json object
array.push({"name": i, "data": array1[i]});
}
或者,您可以使用Object.entries()
从对象中获取一组键值对keys
,然后将其映射(使用.map()
)到其自己的对象:
var array = Object.entries(array1).map(([name, data]) => ({name, data}));
编辑
根据您的修改,您需要迭代外部details
对象键。可以再次使用Object.entries
,然后重新映射每个detail
键以指向重新映射的内部对象,如下所示:
const obj = {
"details1": {
"user1": ["report_dev", "report_test"],
"user2": ["output1", "output2", "output3", "output4"]
},
"details2": {
"user1": ["report_dev", "report_test"],
"user2": ["output1", "output2", "output3", "output4"]
}
}
const res = Object.assign({}, ...Object.entries(obj).map(([det, obj]) => ({
[det]: Object.entries(obj).map(([name, data]) => ({name, data}))
})));
console.log(res);