我具有这种格式的JSON格式:
var myJSON =
{
[
{"project":"4","value":"5"},
{"project":"2","value":"3"},
{"project":"4","value":"5"},
{"project":"4","value":"4"},
{"project":"1","value":"8"},
]
}
我想做一个 SELECT SUM(value) WHERE Project = 4
之类的查询。我该如何在JavaScript中进行此类查询?我检查了JSON PATH,我找不到方法来进行此类查询。
您的JSON数据看起来不正确。可能您需要像
那样更改它var myJSON =
{
data: [
{"project":"4","value":"5"},
{"project":"2","value":"3"},
{"project":"4","value":"5"},
{"project":"4","value":"4"},
{"project":"1","value":"8"},
]
}
然后总和看起来像:
var myJSON =
{
data: [
{"project":"4","value":"5"},
{"project":"2","value":"3"},
{"project":"4","value":"5"},
{"project":"4","value":"4"},
{"project":"1","value":"8"},
]
}
var sum = 0;
for(var i = 0; i< myJSON.data.length; i++) {
var project = myJSON.data[i];
if (project.project === "4"){
sum += parseInt(project.value, 10);
}
}
条件简单的工作:
var sum = 0;
for(var i in myJSON) {
if(myJSON[i].project == 4)
sum += parseInt(myJSON[i].value);
}
var JSON = {
data: [
{"project":"4","value":"5"},
{"project":"2","value":"3"},
{"project":"4","value":"5"},
{"project":"4","value":"4"},
{"project":"1","value":"8"},
]
}
var sum = 0;
JSON.data.forEach(function(val){
sum += val.project==="4"?
parseInt(val.value, 10): 0;
});
console.log(sum);
var sum = jsonPath(myjsonobj, "$.data[?(@.project=='4')].value").reduce(function(pv, cv){
return parseInt(cv) + parseInt(pv);
});
一些解释:
$.data[?(@.project=='4')].value
-给出一个数组,仅具有 project == "4"
reduce(...)
-执行数组的所有元素的函数(请参阅ecmascript doc)
pv, cv
-数组元素的函数调用值和当前值。先前的值是(在此解决方案中)到目前为止,当前值是当前数组元素(如数据中的字符串)。因此,对于每个数组元素,其整数值添加到"上一个"值中,最后由reduce()
返回。
这不是有效的JSON,请先对其进行更正。如果您的JSON是这样的:
var myJSON =
{
"data":[
{"project":"4","value":"5"},
{"project":"2","value":"3"},
{"project":"4","value":"5"},
{"project":"4","value":"4"},
{"project":"1","value":"8"}
]
}
然后使用此功能获取总和:
getSum(key){
let sum = 0;
myJSON.data.forEach(i=>{
if(i.project == key){
sum+= parseFloat(i.value);
}
})
return sum;
}