相当于在 Javascript 中对 JSON 进行"SELECT SUM(x)"查询



我具有这种格式的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;
}

最新更新