网站首页 > 精选文章 / 正文
在 YAML 配置设计中,针对"列表项存在基础形态和扩展形态"的常见场景,我们提供三种结构化方案及其处理逻辑:
方案一:全量映射格式(显式冗余)
ext:
- name: bcmath
option: [] # 显式声明空列表
- name: curl
option: []
- name: gd
option:
- with-freetype
- with-jpeg
- with-webp
处理优势:
- 数据结构完全统一,无需转换逻辑
- 可直接使用 yq '.ext' <<< "$yaml" 提取
适用场景:
强类型系统对接或需要严格数据校验的环境
方案二:智能省略格式(条件补全)
ext:
- name: bcmath # 省略空属性
- name: curl
- name: gd
option:
- with-freetype
- with-jpeg
- with-webp
数据查询:
yq '.ext | map(with( select( has("option") | not); .option=[] ))' <<< "$yaml"
实现原理:
通过空值检测自动补全默认属性,适合属性存在默认值的场景
方案三:混合结构格式(语法糖优化)
ext:
- bcmath # 字符串简写形式
- name: curl # 省略空属性
- name: gd # 完整映射形式
option:
- with-freetype
- with-jpeg
- with-webp
统一化处理命令:
yq '.ext | map(
with( select(type == "!!str"); . |= { "name": . } )
| .option |= ( . // [] )
)' <<< "$yaml"
核心优势:
在保持数据可读性的同时,极大减少样板代码
总结
混合结构格式兼容前两种模式,通过类型检测(!!str/!!map)和空值合并运算符(//)实现统一处理,最终输出标准数据结构。
Tags:yaml map
猜你喜欢
- 2025-05-03 大模型直接搜索图片内容!群晖部署AI相册管理工具 immich(二)
- 2025-05-03 这样构建 K8s 中间件运维平台,运维真的能少遭很多罪……
- 2025-05-03 构建 Kubernetes中间件运维平台:标准化、可视化与全栈运维
- 2025-05-03 flutter集成 百度地图 ^2.0.1版本 | 绕坑必备
- 2025-05-03 涨薪技术|Kubernetes(k8s)之yaml语法大全
- 2025-05-03 步步为营把k8s pvc存储从一个ceph集群迁移到另一个
- 2025-05-03 opsone运维管理平台的独门绝技系列之一
- 2025-05-03 教你 7 步快速构建 GitLab 持续集成环境
- 2025-05-03 Kubernetes中的PV、PVC、Configmap介绍
- 2025-05-03 kubernetes环境手动部署 Prometheus 监控系统安装文档