使用JSONPath对Zabbix API返回结果的total字段求和失败求助
解决Zabbix API返回结果中total字段的求和问题
给定Zabbix API返回的JSON结果:
{ "result": "success", "maxTotal": 2, "users": [ { "unit": "2025-04-01", "total": 2 }, { "unit": "2025-04-02", "total": 3 } ] }需要对所有
total字段的值求和,但尝试的$.users[*].total.sum()、$.sum($.users[*].total)等JSONPath表达式均无法生效。
核心原因
大部分JSONPath的标准实现(包括Zabbix内置的JSON解析器)不支持sum()这类聚合函数,你尝试的语法属于特定JSONPath库(如Jayway JsonPath)的非标准扩展,因此无法在通用场景下生效。
可行解决方法
1. 用编程语言处理返回结果
拿到API返回的JSON数据后,通过代码遍历数组求和,这是最通用的方案:
Python 示例
import json # 假设api_response是你从Zabbix API获取的返回字符串 api_response = '''{ "result": "success", "maxTotal": 2, "users": [ { "unit": "2025-04-01", "total": 2 }, { "unit": "2025-04-02", "total": 3 } ] }''' data = json.loads(api_response) total_sum = sum(item["total"] for item in data["users"]) print(total_sum) # 输出:5
JavaScript 示例
// 假设apiResponse是API返回的字符串 const apiResponse = `{ "result": "success", "maxTotal": 2, "users": [ { "unit": "2025-04-01", "total": 2 }, { "unit": "2025-04-02", "total": 3 } ] }`; const data = JSON.parse(apiResponse); const totalSum = data.users.reduce((acc, current) => acc + current.total, 0); console.log(totalSum); // 输出:5
2. Zabbix内部场景的处理(如触发器、HTTP Agent)
如果是在Zabbix的HTTP Agent监控项中获取了该JSON数据,无法直接用JSONPath求和,需要:
- 先用JSONPath提取每个
total值(比如$.users[0].total、$.users[1].total),生成多个独立监控项 - 再创建一个计算型监控项,用Zabbix的
sum()函数将这些值相加,表达式示例:sum(last("item.key.1"), last("item.key.2"))
内容的提问来源于stack exchange,提问作者user30154581
相关产品推荐
相关产品推荐

