在 json 文件中查找特定值并使用 jq 向其附加后缀
find a specific value in json file and append suffix to it using jq
我想匹配 json 文件中的特定值,并在同一个 json 文件中为其附加一个后缀。
这是我的 json 文件
{
"apiVersion": "argoproj.io/v1alpha1",
"kind": "Workflow",
"metadata": {
"generateName": "kns-vm-"
},
"spec": {
"templates": [{
"inputs": {
"parameters": [{
"name": "un",
"value": "org"
}]
},
"dag": {
"tasks": [{
"name": "create-ns",
"templateRef": {
"name": "wft-kn"
},
"arguments": {
"parameters": [{
"name": "un",
"value": "{{inputs.parameters.un}}"
}]
}
},
{
"name": "create-sm",
"templateRef": {
"name": "wft-sn"
},
"arguments": {
"parameters": [{
"name": "un",
"value": "{{inputs.parameters.un}}"
}]
}
}
]
}
}]
}
}
在此我想找到值 wft-sn
并在其后附加一个后缀 -test
所以更新后的 json 文件应该如下所示
{
"apiVersion": "argoproj.io/v1alpha1",
"kind": "Workflow",
"metadata": {
"generateName": "kns-vm-"
},
"spec": {
"templates": [{
"inputs": {
"parameters": [{
"name": "un",
"value": "org"
}]
},
"dag": {
"tasks": [{
"name": "create-ns",
"templateRef": {
"name": "wft-kn"
},
"arguments": {
"parameters": [{
"name": "un",
"value": "{{inputs.parameters.un}}"
}]
}
},
{
"name": "create-sm",
"templateRef": {
"name": "wft-sn-test"
},
"arguments": {
"parameters": [{
"name": "un",
"value": "{{inputs.parameters.un}}"
}]
}
}
]
}
}]
}
}
我正在使用下面的 jq
命令,但它不起作用
jq '. | select(.spec.templates[].dag.tasks[].templateRef.name == "wft-sn").name |= . + "-test"' demo.json
我在这里犯了什么错误?我们如何做到这一点?
如果条件的计算结果为 true
,select
将重现其输入。因此仅将其应用于您要测试的部分。此外,将整体上下文保留在括号中以将其保留在 top-level 上以供输出:
jq '(.spec.templates[].dag.tasks[].templateRef.name | select(. == "wft-sn")) += "-test"'
{
"apiVersion": "argoproj.io/v1alpha1",
"kind": "Workflow",
"metadata": {
"generateName": "kns-vm-"
},
"spec": {
"templates": [
{
"inputs": {
"parameters": [
{
"name": "un",
"value": "org"
}
]
},
"dag": {
"tasks": [
{
"name": "create-ns",
"templateRef": {
"name": "wft-kn"
},
"arguments": {
"parameters": [
{
"name": "un",
"value": "{{inputs.parameters.un}}"
}
]
}
},
{
"name": "create-sm",
"templateRef": {
"name": "wft-sn-test"
},
"arguments": {
"parameters": [
{
"name": "un",
"value": "{{inputs.parameters.un}}"
}
]
}
}
]
}
}
]
}
}
我也删除了不必要的 . |
并将 |= . +
减少为 +=
。
我想匹配 json 文件中的特定值,并在同一个 json 文件中为其附加一个后缀。
这是我的 json 文件
{
"apiVersion": "argoproj.io/v1alpha1",
"kind": "Workflow",
"metadata": {
"generateName": "kns-vm-"
},
"spec": {
"templates": [{
"inputs": {
"parameters": [{
"name": "un",
"value": "org"
}]
},
"dag": {
"tasks": [{
"name": "create-ns",
"templateRef": {
"name": "wft-kn"
},
"arguments": {
"parameters": [{
"name": "un",
"value": "{{inputs.parameters.un}}"
}]
}
},
{
"name": "create-sm",
"templateRef": {
"name": "wft-sn"
},
"arguments": {
"parameters": [{
"name": "un",
"value": "{{inputs.parameters.un}}"
}]
}
}
]
}
}]
}
}
在此我想找到值 wft-sn
并在其后附加一个后缀 -test
所以更新后的 json 文件应该如下所示
{
"apiVersion": "argoproj.io/v1alpha1",
"kind": "Workflow",
"metadata": {
"generateName": "kns-vm-"
},
"spec": {
"templates": [{
"inputs": {
"parameters": [{
"name": "un",
"value": "org"
}]
},
"dag": {
"tasks": [{
"name": "create-ns",
"templateRef": {
"name": "wft-kn"
},
"arguments": {
"parameters": [{
"name": "un",
"value": "{{inputs.parameters.un}}"
}]
}
},
{
"name": "create-sm",
"templateRef": {
"name": "wft-sn-test"
},
"arguments": {
"parameters": [{
"name": "un",
"value": "{{inputs.parameters.un}}"
}]
}
}
]
}
}]
}
}
我正在使用下面的 jq
命令,但它不起作用
jq '. | select(.spec.templates[].dag.tasks[].templateRef.name == "wft-sn").name |= . + "-test"' demo.json
我在这里犯了什么错误?我们如何做到这一点?
true
,select
将重现其输入。因此仅将其应用于您要测试的部分。此外,将整体上下文保留在括号中以将其保留在 top-level 上以供输出:
jq '(.spec.templates[].dag.tasks[].templateRef.name | select(. == "wft-sn")) += "-test"'
{
"apiVersion": "argoproj.io/v1alpha1",
"kind": "Workflow",
"metadata": {
"generateName": "kns-vm-"
},
"spec": {
"templates": [
{
"inputs": {
"parameters": [
{
"name": "un",
"value": "org"
}
]
},
"dag": {
"tasks": [
{
"name": "create-ns",
"templateRef": {
"name": "wft-kn"
},
"arguments": {
"parameters": [
{
"name": "un",
"value": "{{inputs.parameters.un}}"
}
]
}
},
{
"name": "create-sm",
"templateRef": {
"name": "wft-sn-test"
},
"arguments": {
"parameters": [
{
"name": "un",
"value": "{{inputs.parameters.un}}"
}
]
}
}
]
}
}
]
}
}
我也删除了不必要的 . |
并将 |= . +
减少为 +=
。