试图为数组中的每个项目创建一个新的json对象
trying to create a new json object foreach item in array
我有这种结构的大型json文件,每个文件中只有更多的图表:
{
"Name": "test",
"Charts": [
{
"chartName": "Idle Times",
"disk": 0,
"OpCode": "Read",
"xAxis": [0,100,200,300,400,500],
"yAxis": [337487,8565,11419,9704,7598]
},
{
"chartName": "Idle Times",
"disk": 0,
"OpCode": "Read",
"xAxis": [0,100,200,300,400,500],
"yAxis": [337487,8565,11419,9704,7598]
}]
}
问题是,所有的图表数据,x-y数据,是在数组和javascript图表工具我使用需要json看起来像这样:
{"chartName":"Idle Times", "disk":0, "OpCode":"Read","xAxis":0, "yAxis":1234},
{"chartName":"Idle Times", "disk":0, "OpCode":"Read","xAxis":100, "yAxis":1234},
{"chartName":"Idle Times", "disk":0, "OpCode":"Read","xAxis":200, "yAxis":1234},
{"chartName":"Idle Times", "disk":0, "OpCode":"Read","xAxis":300, "yAxis":1234},
{"chartName":"Idle Times", "disk":0, "OpCode":"Read","xAxis":400, "yAxis":1234},
{"chartName":"Idle Times", "disk":0, "OpCode":"Read","xAxis":500, "yAxis":1234},
{"chartName":"Idle Times", "disk":0, "OpCode":"Read","xAxis":600, "yAxis":1234}
我的应用程序目前使用AngularJS, JSLINQ, D3JS和DimpleJS。如果有一种方法可以用这些工具来完成这一点,那将是理想的。我也对另一个开源库开放,我只是希望我不需要读取整个json文件,然后用一堆复杂的for循环返回,基本上是一行一行地手工构建新的json。
我也愿意切换到另一个图表工具,如果有什么东西会读取json数据的方式,我现在有它,DimpleJS只是很容易使用,看起来真的很锋利。
提前感谢您的帮助!
那么,如果我理解正确的话,您想将每个x
和y
坐标扩展为单独的点?试试这样做:
var source = {
"Name": "test",
"Charts": [
{
"chartName": "Idle Times",
"disk": 0,
"OpCode": "Read",
"xAxis": [0,100,200,300,400,500],
"yAxis": [337487,8565,11419,9704,7598]
},
{
"chartName": "Idle Times",
"disk": 0,
"OpCode": "Read",
"xAxis": [0,100,200,300,400,500],
"yAxis": [337487,8565,11419,9704,7598]
}]
};
var data = source.Charts.reduce(function(prev, now) {
var target = [];
for(var i = 0, len = now.yAxis.length; i < len; i++) {
target.push({
"chartName": now.chartName,
"disk": now.disk,
"OpCode": now.OpCode,
"xAxis": now.xAxis[i],
"yAxis": now.yAxis[i]
})
}
return prev.concat(target)
}, [])
只要你有相等的点数,这应该可以工作。
似乎需要修改输入以匹配图表库的预期格式。下面的代码片段展示了如何做到这一点。
对于给定的输入:
var obj = {
"chartName": "Idle Times",
"disk": 0,
"OpCode": "Read",
"xAxis": [0,100,200,300,400],
"yAxis": [337487,8565,11419,9704,7598]
};
遍历xAxis值:
var results = [];
for (var i = 0; i < obj.xAxis.length; i++) {
results.push({
"chartName":obj.chartName,
"disk":obj.disk,
"OpCode":obj.OpCode,
"xAxis":obj.xAxis[i],
"yAxis":obj.yAxis[i]
});
}
相关文章:
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- Javascript(Angular)从一个对象数组到第二个数组查找值
- 对一个对象使用reduce可以返回一个没有't在数组中包含目标字母
- AngularJS&JSON-从Previous&下一个对象
- jQuery$.inArray()总是返回-1和一个对象数组
- javascript处理一个对象数组以获得一个新的对象数组
- javascript函数,它接受两个输入:一个对象和一个键,并返回对象中该键的相应值
- 你能用来自数组的属性名称生成一个对象吗
- 预期响应包含一个对象,但在angular js中得到一个数组错误
- Protractor:element.getText()返回一个对象,而不是String
- 如何使用jQuery添加另一个对象的高度作为边距
- 计算从一个对象到另一个对象的路径并沿其移动
- 如何将一个对象添加到每个对象数组中
- 为了避免创建全局变量,可以将所有变量分配给一个对象吗
- 将javascript对象(属性+值)合并到一个对象中
- 尝试简化检查对象键是否为true并将其推送到另一个对象
- 从 javascript 中的对象方法返回一个对象
- 响应应包含一个对象,但得到的却是GET操作的数组
- js:如何制作一个循环,将20个不同的东西添加到一个对象中
- 用javascript创建另一个对象的实例