所以我的JSON看起来像 -
[
{
"Metric": "7e70661f-e266-4745-9b1b-c5c5691e9746",
"Pivot1": 40.00000,
"Pivot2": 38.00000,
"Pivot3": 18.00000,
"Total": 96.00000,
"Average": 32.00000,
"IsTotal": 0,
"MetricOrder": 1
}
]
使用javascript和/或jQuery我想最终得到 -
[
{
"Metric":"7e70661f-e266-4745-9b1b-c5c5691e9746",
"Pivot1":40.00000,
"Pivot1DFA": 125.000%,
"Pivot2":38.00000,
"Pivot2DFA": 118.750%,
"Pivot3":18.00000,
"Pivot3DFA": 56.250%,
"Total":96.00000,
"Average":32.00000,
"IsTotal":0,
"MetricOrder":1
}
]
(DFA代表与平均值的差异)。
在这个例子中,我有3个Pivot列。我可以并且可能会有更多,但我不知道,直到我从服务器返回JSON。
我如何做到这一点?
答案 0 :(得分:1)
纯javascript解决方案
对于以“Pivot”开头的json中的所有键,在结果json中添加一个具有所需操作的键
json = {"Metric": "7e70661f-e266-4745-9b1b-c5c5691e9746",
"Pivot1": 40.00000,
"Pivot2": 38.00000,
"Pivot3": 18.00000,
"Total": 96.00000,
"Average": 32.00000,
"IsTotal": 0,
"MetricOrder": 1
}
json_parsed = {}
Object.keys(json).forEach(
function(e){
json_parsed[e] = json[e]
if(e.indexOf("Pivot") === 0){
var avg = json["Average"]
json_parsed[e+"DFA"] = ((json[e] / avg ) * 100.0) +"%"
}
}
)
使用此解决方案json_parsed
与json
var具有相同的顺序,您可以控制键顺序
>>>> Object.keys(json_parsed)
>>>> ["Metric", "Pivot1", "Pivot1DFA", "Pivot2", "Pivot2DFA", "Pivot3", "Pivot3DFA", "Total", "Average", "IsTotal", "MetricOrder"]
答案 1 :(得分:0)
jQuery有一个.each()
函数,在这里很有用。
看起来您必须进行两次通过,一次计算平均值,另一次计算DFA
var values = [{"Metric": "7e70661f-e266-4745-9b1b-c5c5691e9746",
"Pivot1": 40.00000,
"Pivot2": 38.00000,
"Pivot3": 18.00000,
"Total": 96.00000,
"Average": 32.00000,
"IsTotal": 0,
"MetricOrder": 1
}];
var totals = {};
var count = values.length;
$.each(values, function(idx, obj){
$.each(obj, function(idx2, val){
if(idx2.indexOf('Pivot') == 0){
if(typeof totals[idx2] == 'undefined'){
totals[idx2] = 0.0;
}
totals[idx2] += obj[idx2];
}
});
});
$.each(values, function(idx, obj){
$.each(obj, function(idx2, val){
if(idx2.indexOf('Pivot') == 0){
obj[idx2+'DFA'] = totals[idx2] / obj[idx2];
}
});
});
console.log(values);
然后你想要计算百分比的任何方法,乘以100并使其成为%符号的字符串取决于您,但可以在第二个循环中完成。
答案 2 :(得分:0)
我还没有完成实际的计算逻辑,只是提供了一个默认值,你可以提出你的计算逻辑。 所有过程后的最终对象“jsonData”将为您提供所需的输出。
var jsonData = [
{
"Metric": "7e70661f-e266-4745-9b1b-c5c5691e9746",
"Pivot1": 40,
"Pivot2": 38,
"Pivot3": 18,
"Total": 96,
"Average": 32,
"IsTotal": 0,
"MetricOrder": 1
}
];
var properties = [];
for (var o in jsonData[0]) {
if (o.indexOf('Pivot') > -1)
properties.push(o);
}
$.each(jsonData, function (index, value) {
$.each(properties, function (idx, val) {
var currentValue = value[val];
value[val + 'DFA'] = "0"; //your calculation logic to be done here
});
});
希望这会有所帮助:)
答案 3 :(得分:-1)
首先将json转换为对象:
myJsonObj = JSON.parse(myJsonStr);
第二个操纵对象:
myJsonObj['Pivot1DFA'] = 125.000%;
等
第三次转换回json:
myJsonStr = JSON.stringify(myJsonObj);