如何使用javascript重新格式化(转换)我的json结果?

时间:2015-08-10 15:31:39

标签: json loops format transformation

我有一个简单的循环,可以从较大的数据集中提取json对象的子集。

function getData(d) {

    var data = {};

    for (var i=0; i < d.length; i++){
        data[i] = {
            'date'  :   d[i].date,
            'light' :   Math.round(d[i].details.light/60),
            'deep'  :   Math.round(d[i].details.deep/60),
            'awake' :   Math.round(d[i].details.awake/60),
            'duration': Math.round(d[i].details.duration/60),
            'quality':  Math.round(d[i].details.quality*10)
            };
        console.log(data[i]);
    };
    return data;
}

getData(d);

它以

的形式生成json结果
{
   date: 20150809, 
   light: 168, 
   deep: 206, 
   awake: 64, 
   duration: 438,
   quality: 100
}, ...

我怎样才能将其变成所需的形式,

   [{
       "key":"light",
       "date":20150809,
       "value":168
    },
    {
       "key":"deep",
       "date": 20150809,
       "value":206
    },
    {
       "key":"awake",
       "date":20150809,
       "value":64
    },
    {
       "key":"duration",
       "date": 20150809,
       "value":438
    }, 
    ...
    {
       "key":"quality",
       "date":20150809,
       "value":6100
    }]

我的问题是,如果不对数据集进行五次迭代(5种密钥类型中的每一种),我怎样才能实现这一目标?我假设至少需要一次迭代。 jquery解决方案是可以接受的。

我正在寻找一个包含所有json对象的数组,而不是嵌套对象的关联数组。

由于

2 个答案:

答案 0 :(得分:2)

假设您的数据采用以下格式的数组:

var data = [
   {
       date: 20150809,
       light: 168,
       deep: 206,
       awake: 64,
       duration: 438,
       quality: 100
    },
    {
       date: 20153203,
       light: 2,
       deep: 21,
       awake: 21,
       duration: 21,
       quality: 32
    }
    ... 
    ];

您可以尝试这样的事情:

var results = [];

data.forEach(function(e) {
  for (var key in e) {
    if (key !== 'date')
      results.push({
        key  : key,
        date : e.date,
        value : e[key]
      });
    }
});

答案 1 :(得分:0)

考虑对象

{
   date: 20150809, 
   light: 168, 
   deep: 206, 
   awake: 64, 
   duration: 438,
   quality: 100
}

您希望将每个键转换为一个对象而不会遍历每个对象。我想以下几点:

function convertToJson(obj){
   var myJson = {};
   var myKeys = obj.keys(); // return an array with the keys of the object
   myJson.keys = myKeys[1];
   myJson.date = myKeys[0]; // your date
   myJson.value = obj.light;
   ... // do the same with the rest of the elements, if you don't want to loop.

  return JSON.stringfy(myJson);       
}

我不是javascript大师,所以我感谢任何反馈。