jq提取JSON组件状态失败,如何修正以得到目标输出?
解决jq提取组件状态返回null的问题
问题分析
原命令的核心错误是路径定位偏差:你试图直接获取.value.components.status,但实际JSON结构中components下是多层嵌套的子组件(比如db节点下还有angleDS、argosleDS这类带status属性的子项),原路径无法匹配到这些深层的状态值,因此返回null。
修改后的jq命令
curl -s http://example:8080/external_indicator | jq -r ' .components | to_entries[] | if .value | type == "object" and .value | has("status") then [.key, .value.status] else .value | to_entries[] | [.key, .value.status] end | [$id, $status] = . | "app_custom,\($id)=\($status) status_code=\(["DOWN","UP"] | index($status))" '
命令说明
- 直接定位到顶层的
components对象,遍历其所有键值对 - 针对每个条目做分支处理:
- 如果当前值是带
status的独立组件,直接提取组件名称和状态 - 如果是包含子组件的嵌套对象(比如
db),继续遍历其内部的子键值对,提取子组件的名称和状态
- 如果当前值是带
- 最后将提取到的内容格式化为你需要的字符串,
status_code按规则映射:UP对应1,DOWN对应0
预期输出
执行修改后的命令后,会生成符合要求的结果:
app_custom,db=UP status_code=1 app_custom,angleDS=UP status_code=1 app_custom,argosleDS=UP status_code=1
内容的提问来源于stack exchange,提问作者user5820327
相关产品推荐
相关产品推荐

