如何让jq输出JSON时自动跳过值为null的空字段
jq过滤null字段解决方案
你可以在原有jq命令末尾添加一段删除null值字段的逻辑,即可实现值为null的字段不输出的效果。
修改后的完整命令
(.spec.rules[0].match.resources.kinds[] / "/") | [select(.[1])[0] // null, select(.[2])[1] // null, last] as [$version,$group,$kind] | {$version,$group,$kind} | del(.[] | select(. == null))
逻辑说明
- 新增的
del(.[] | select(. == null))会遍历当前输出对象的所有字段,只要字段值等于null,就会自动删除该字段,不需要调整原有拆分逻辑 - 该方案兼容性强,不管后续新增多少个可能为null的字段,都可以直接复用这段过滤逻辑
效果示例
- 当处理
networking.k8s.io/v1/NetworkPolicy时输出:
{ "version": "networking.k8s.io", "group": "v1", "kind": "NetworkPolicy" }
- 当处理没有group的
v1/Pod时输出:
{ "version": "v1", "kind": "Pod" }
- 当处理只有kind的
Pod时输出:
{ "kind": "Pod" }
内容的提问来源于stack exchange,提问作者mifogon
相关产品推荐
相关产品推荐

