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

JQ如何按复杂条件拆分/分隔符 解析不同格式K8s资源Kind字符串

JQ拆分Kubernetes API资源标识符方案

完整通用JQ命令如下:

.spec.rules[0].match.resources.kinds[]
| split("/")
| {
    group: if length == 3 then .[0] else "" end,
    version: if length == 3 then .[1] elif length == 2 then .[0] else "" end,
    kind: if length == 3 then .[2] elif length == 2 then .[1] else .[0] end
}

实现逻辑

  • 先用split("/")将每个资源标识符按斜杠拆分为数组
  • 基于数组长度自动匹配三种格式做字段提取:
    • 数组长度为3:匹配Group/Version/Kind格式,按顺序提取分组、版本、资源类型
    • 数组长度为2:匹配Version/Kind格式,分组字段留空,提取版本、资源类型
    • 数组长度为1:匹配仅Kind格式,分组和版本字段留空,提取资源类型

运行效果示例

针对你给出的示例JSON,运行上述命令后输出结果为:

{
  "group": "networking.k8s.io",
  "version": "v1",
  "kind": "NetworkPolicy"
}

变量引用写法

如果你需要将拆分后的字段赋值为变量供后续逻辑使用,可以采用如下写法:

.spec.rules[0].match.resources.kinds[]
| split("/")
| if length == 3 then .[0] else "" end as $group
| if length == 3 then .[1] elif length == 2 then .[0] else "" end as $version
| if length == 3 then .[2] elif length == 2 then .[1] else .[0] end as $kind
# 后续可直接引用$group、$version、$kind做自定义处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 16:45:04