You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 12:55:01