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

如何使用Mike Farah's yq将一级键替换为其唯一子节点?

问题:使用Mike Farah's yq替换一级键为对应值的唯一子节点

给定输入JSON:

{
    "a": {
        "aa": {
            "aaa1": "value",
            "aaa2": "value"
        }
    },
    "b": {
        "bb": {
            "bbb1": "value",
            "bbb2": "value"
        }
    }
}

期望输出YAML格式:

aa:
  aaa1: value
  aaa2: value
bb:
  bbb1: value
  bbb2: value

场景说明

  • 实际数据结构可能更深、一级键数量更多,键名无固定规律
  • 每个一级键的对应值仅有一个子节点,需将一级键替换为该子节点的键,同时将值替换为该子节点的内容

尝试过的无效命令

with_entries(.parent |= .value)
with_entries(.parent |= .)

正确的yq表达式

yq 'with_entries(.key = (.value | keys | .[0]), .value = (.value | .[]))' input.json

命令解释

  • with_entries(...):遍历顶层的每个键值对
  • .key = (.value | keys | .[0]):将当前条目的键替换为其对应值的唯一子节点的键(因每个值仅一个子节点,取第一个键即可)
  • .value = (.value | .[]):将当前条目的值替换为其对应值的唯一子节点的内容(直接展开该子节点的对象)

yq默认会将JSON输入转为YAML输出,无需额外参数即可得到预期格式。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 22:12:45