如何使用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
相关产品推荐
相关产品推荐

