改造Json的推荐方式/库是什么?

时间:2017-03-23 11:44:22

标签: javascript json d3.js

我有一个返回以下Json的Web服务:

[{"DailyHedge": "1.3414894654050926"}, 
 {"OptimalHedge": "1.6788094119827568"}]

为了使用d3js绘制它,我需要将其转换为:

[{"category": "DailyHedge", "measure": 1.3414894654050926}, 
 {"category": "OptimalHedge", "measure": 1.6788094119827568}]

我一直在浏览underscore.js,但总的来说我不知道​​该用什么......

2 个答案:

答案 0 :(得分:3)

你可以使用普通的,普通的JavaScript来做到这一点,但是因为你使用的是D3,所以可以使用d3.keysd3.values来完成。

根据API,d3.keys

  

返回一个包含指定对象(关联数组)的属性名称的数组。返回数组的顺序是未定义的。

并且d3.values:

  

返回一个包含指定对象(关联数组)的属性值的数组。返回数组的顺序是未定义的。

这是一个演示:

var data = [{
  "DailyHedge": "1.3414894654050926"
}, {
  "OptimalHedge": "1.6788094119827568"
}];

var newData = [];

data.forEach(function(d) {
  newData.push({
    category: d3.keys(d)[0],
    measure: +d3.values(d)[0]
  });
});

console.log(newData)
<script src="https://d3js.org/d3.v4.min.js"></script>

在vanilla JavaScript中,只需使用Object.keysObject.values即可。但是,IE,Opera或Safari上的Object.values doesn't work。另一种方法是使用for...in循环。

答案 1 :(得分:1)

使用普通javascript实现实现:

var data = [{"DailyHedge": "1.3414894654050926"},
 {"OptimalHedge": "1.6788094119827568"}];

var newdata = [];

for(let key in data)
{
    let obj = data[key];

    Object.keys(obj).forEach(key => {

        var row = {"category": key, "measure": obj[key]};

        newdata.push(row);

    });
}

console.log(newdata);