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

使用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"}]
    • 如果数组已有内容,保持原数组不变

之前尝试的问题分析

  1. 第一个命令:使用+和unique会给所有ex数组追加默认项,包括已有内容的数组,不符合需求;且重复遍历全路径,逻辑冗余。
  2. 第二个命令://是设置默认值,但后续+=会无条件追加默认项,导致非空数组被额外添加内容。
  3. 第三个命令:语法错误,//的使用逻辑混乱,无法实现条件更新。
  4. 第四个命令:遍历def[]后筛选key == "ex"的方式有误,上下文对象处理逻辑不对,无法精准定位空数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 03:32:43