使用 JMESPath 对 JSON 数组的值求和
Sum values of JSON array using JMESPath
我正在尝试使用 JMESPath
的 sum
功能,但遇到了一些问题。我设法弄清楚如何在多个条件下使用搜索功能。本声明:
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(@))");
我正在尝试使用 JMESPath
的 sum
功能,但遇到了一些问题。我设法弄清楚如何在多个条件下使用搜索功能。本声明:
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(@))");