使用JMESPath的JSON数组的总和

时间:2018-08-10 17:36:37

标签: arrays json jmespath

我正在尝试使用sum的{​​{1}}函数,但遇到了一些麻烦。我设法弄清楚了如何在多个条件下使用搜索功能。这句话:

JMESPath

返回此JSON数组:

var x = search(myData, "Account[].Details[? Year=='2018' && Title=='ABC'].Amount");

现在我想做的就是总结这些值。 JMESPath specification表示对内置["2404.00", "2404.00", "2402.67", "2699.00", "2699.00", "2698.49"] 函数使用以下语法:

sum

我不知道如何使用此功能。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

我拿了您的last example,并添加了更多示例数据,我们将对价格求和

const testData =
{
"ServiceAccount": [
    {
        "Type": "WIDGET",
        "ID": [
            {
                "OrderNum": "12345",
                "OrderTyp": "ABDCD",
                "Price": "10",
            }
        ]
      },
      {
        "Type": "WIDGET",
        "ID": [
            {
                "OrderNum": "22345",
                "OrderTyp": "ZBDCD",
                "Price": "20",
            }
        ]
      },
      {
        "Type": "WIDGET",
        "ID": [
            {
                "OrderNum": "22385",
                "OrderTyp": "ZBDXD",
                "Price": "30",
            }
        ]
      }
    ]
};

const result = jmespath.search(testData, 'sum(ServiceAccount[].ID[].Price.to_number(@))');

console.log(result);

   
<script src="https://cdnjs.cloudflare.com/ajax/libs/jmespath/0.15.0/jmespath.min.js"></script>

那么,当前问题的答案是这样:

var x = search(myData, "sum(Account[].Details[? Year=='2018' && Title=='ABC'].Amount.to_number(@))");