创建自定义json对象

时间:2019-07-01 13:58:01

标签: javascript json

我有一个来自我的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"]

2 个答案:

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