使用 JMESPath 对 JSON 数组的值求和

Sum values of JSON array using JMESPath

我正在尝试使用 JMESPathsum 功能,但遇到了一些问题。我设法弄清楚如何在多个条件下使用搜索功能。本声明:

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

returns 这个 JSON 数组:

["2404.00", "2404.00", "2402.67", "2699.00", "2699.00", "2698.49"]

现在我想做的是对这些值求和。 JMESPath specification 表示将此语法用于内置 sum 函数:

number sum(array[number] $collection)

我不明白这个功能怎么用。有人可以帮忙吗?

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

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(@))");