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

如何用jq仅在Kea DHCP查询成功时提取hw-address与ip-address

解决Kea DHCP lease4-get-all查询失败时jq命令失效的问题

核心问题

当调用lease4-get-all返回的result不为0(查询失败)时,返回的JSON结构中不存在leases数组,直接访问.leases[]会导致jq报错退出,无法正常处理结果。

可行解决方案

方案1:带错误提示的条件判断

使用jq的if-then-else结构,成功时提取目标字段,失败时输出错误信息:

curl -X POST -H "Content-Type: application/json" \
  -d '{"command": "lease4-get-all", "service": ["dhcp4"]}' \
  http://你的Kea服务器地址:8000/ | jq '
if .result == 0 then
  .leases[] | {hw_address: ."hw-address", ip_address: ."ip-address"}
else
  {error_message: .text, result_code: .result}
end
'

这个命令会在查询成功时,逐条输出包含硬件地址和IP的对象;失败时输出错误描述和结果码,避免jq报错中断。

方案2:仅处理成功结果(静默忽略失败)

如果只需要在成功时输出结果,失败时不输出任何内容,可以用select先过滤出result为0的情况:

curl -X POST -H "Content-Type: application/json" \
  -d '{"command": "lease4-get-all", "service": ["dhcp4"]}' \
  http://你的Kea服务器地址:8000/ | jq '
select(.result == 0) | .leases[] | {hw_address: ."hw-address", ip_address: ."ip-address"}
'

当查询失败时,jq会直接返回空结果,不会报错。

关键说明

  • Kea DHCP的API返回结果中,result为0表示操作成功,此时才会包含leases数组;非0值对应不同的错误类型,返回结果会包含text字段描述错误原因。
  • 必须先对result字段做判断,再访问leases,否则jq会因为找不到对应字段而抛出Cannot iterate over null或类似错误。

内容的提问来源于stack exchange,提问作者Mark

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 23:54:42