使用yq(go)为空数组添加带默认值的元素
用yq为XML转译的YAML中空ex数组填充默认项
需求背景
已通过以下命令确保XML转成的YAML中ex字段始终为数组:
.xdxf.lexicon.ar[].def[].def[].def[0].def[].ex |= ([] + .)
当前数据中存在空的ex: []数组,需要将这类空数组替换为包含默认项+@type: exm的数组,非空数组保持原样,目标效果:
ex: - +@type: exm
正确命令
.xdxf.lexicon.ar[].def[].def[].def[0].def[].ex |= if . == [] then [{"+@type": "exm"}] else . end
命令说明
- 遍历所有指定路径下的
ex字段:.xdxf.lexicon.ar[].def[].def[].def[0].def[].ex - 使用
|=进行原地更新,通过条件判断处理每个ex数组:- 如果当前数组为空(
. == []),则替换为包含默认对象的数组[{"+@type": "exm"}] - 如果数组已有内容,保持原数组不变
- 如果当前数组为空(
之前尝试的问题分析
- 第一个命令:使用
+和unique会给所有ex数组追加默认项,包括已有内容的数组,不符合需求;且重复遍历全路径,逻辑冗余。 - 第二个命令:
//是设置默认值,但后续+=会无条件追加默认项,导致非空数组被额外添加内容。 - 第三个命令:语法错误,
//的使用逻辑混乱,无法实现条件更新。 - 第四个命令:遍历
def[]后筛选key == "ex"的方式有误,上下文对象处理逻辑不对,无法精准定位空数组。
内容的提问来源于stack exchange,提问作者Boyd
相关产品推荐
相关产品推荐

