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

如何用yq解析含非嵌套多键(abc.def)的YAML并兼容两种格式?

解决两种YAML格式的yq统一解析问题

方法1:单条yq表达式兼容两种格式

利用yq的空值合并操作符//,同时尝试嵌套路径和顶层带点键的访问路径,自动取存在的结果:

yq '.abc.def.key // .["abc.def"].key' your_file.yaml

当嵌套路径.abc.def.key返回null(对应第一种YAML格式)时,会自动 fallback 到访问顶层键abc.def下的key字段;如果是嵌套格式的YAML,会直接返回嵌套路径的结果。

方法2:预处理YAML统一为嵌套格式

如果需要后续始终用统一的嵌套路径解析,可以先把带点的顶层键拆分为嵌套结构,再执行标准解析:

合并为单条命令

直接完成预处理+解析:

yq 'reduce (keys | select(test("\.")))[] as $k (.; .[$k | split(".")] = .[$k] | del(.[$k])) | .abc.def.key' your_file.yaml

分步处理(便于调试)

  1. 预处理命令(将带点顶层键转为嵌套结构,输出处理后的YAML):
yq 'reduce (keys | select(test("\.")))[] as $k (.; .[$k | split(".")] = .[$k] | del(.[$k]))' your_file.yaml
  1. 用标准嵌套路径解析处理后的结果:
yq '.abc.def.key' <(yq 'reduce (keys | select(test("\.")))[] as $k (.; .[$k | split(".")] = .[$k] | del(.[$k]))' your_file.yaml)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 15:52:37