使用 bash、yq、jq 将 yaml 数组替换为 json 格式
replace yaml array with json format using bash, yq, jq
为了使用 yaml 格式显示信息时的可读性,我希望能够用其 json 等效项替换 yaml 数组
问题是我可能有几个实例要在 yaml file/output 中替换为不同的路径
示例:
objects:
- object:
name: objA
inputs:
- dims:
- 1
- 3
- object:
name: objB
outputs:
- dims:
- 5
但我希望 dims 数组的输出为 json 格式,例如
objects:
- object:
name: objA
inputs:
- dims: [1,3]
- object:
name: objB
outputs:
- dims: [5]
将值从 yaml 转换为 json 很容易,修改 yaml 节点的值很容易,但我不知道如何获取“dims”节点的值,将其转换到 json 值字符串,将其放回节点中(我的意思是不显式搜索所有实例)
总的来说,我正在寻找一种方法来替换节点的值,以及对节点值进行处理的结果(其他示例,将 id 替换为检索到的相应对象的名称通过 REST api 请求)
objects:
- object:
name: objA
dependency: 3fc4bd5b-a6ee-4469-946d-5f780476784e
会显示为
objects:
- object:
name: objA
dependency: name-of-dependency
其中 id 被依赖项的友好名称替换
谢谢
您可以使用 tojson
和更新运算符 |=
。这会将您的数组编码为 JSON,这是一个字符串,因此它本身包含在引号中:
yq -y '(.. | .dims? | arrays) |= tojson'
objects:
- object:
name: objA
inputs:
- dims: '[1,3]'
- object:
name: objB
outputs:
- dims: '[5]'
运行 与 Python yq
有mikefarah的yq
yq e '.objects[].object["inputs","outputs"][].dims? |= "["+join(",")+"]"' data.yml
为了使用 yaml 格式显示信息时的可读性,我希望能够用其 json 等效项替换 yaml 数组 问题是我可能有几个实例要在 yaml file/output 中替换为不同的路径
示例:
objects:
- object:
name: objA
inputs:
- dims:
- 1
- 3
- object:
name: objB
outputs:
- dims:
- 5
但我希望 dims 数组的输出为 json 格式,例如
objects:
- object:
name: objA
inputs:
- dims: [1,3]
- object:
name: objB
outputs:
- dims: [5]
将值从 yaml 转换为 json 很容易,修改 yaml 节点的值很容易,但我不知道如何获取“dims”节点的值,将其转换到 json 值字符串,将其放回节点中(我的意思是不显式搜索所有实例)
总的来说,我正在寻找一种方法来替换节点的值,以及对节点值进行处理的结果(其他示例,将 id 替换为检索到的相应对象的名称通过 REST api 请求)
objects:
- object:
name: objA
dependency: 3fc4bd5b-a6ee-4469-946d-5f780476784e
会显示为
objects:
- object:
name: objA
dependency: name-of-dependency
其中 id 被依赖项的友好名称替换
谢谢
您可以使用 tojson
和更新运算符 |=
。这会将您的数组编码为 JSON,这是一个字符串,因此它本身包含在引号中:
yq -y '(.. | .dims? | arrays) |= tojson'
objects:
- object:
name: objA
inputs:
- dims: '[1,3]'
- object:
name: objB
outputs:
- dims: '[5]'
运行 与 Python yq
有mikefarah的yq
yq e '.objects[].object["inputs","outputs"][].dims? |= "["+join(",")+"]"' data.yml