我正在尝试使用 jq 将值添加到特定数组元素内的特定键。我有以下 JSON:
[
{
"name":"element1",
"properties":{
"hardwareProfile":{
"vmSize":"vm_size"
}
}
},
{
"name":"element2",
"properties":{
"hardwareProfile":{
"vmSize":"vm_size"
}
}
}
]
我想将信息添加到第一个元素内的 properties.hardwareProfile
键,使其变为:
[
{
"name":"element1",
"properties":{
"hardwareProfile":{
"vmSize":"vm_size",
"newProperty":"new_value",
"anotherNewProperty":"another_new_value"
}
}
},
{
"name":"element2",
"properties":{
"hardwareProfile":{
"vmSize":"vm_size"
}
}
}
]
我在添加信息方面取得了有限的成功:
$ VM_SIZE_INFO="{newProperty:\"new_value\", anotherNewProperty:\"another_new_value\"}"
$ jq "[.[0].properties.hardwareProfile + $VM_SIZE_INFO]" resources.json
[
{
"vmSize": "Standard_B8ms",
"newProperty": "new_value",
"anotherNewProperty": "another_new_value"
}
]
但这对我来说并不起作用,因为我需要输出上的完整 json。
我该怎么做?谢谢!
最佳答案
您的想法是正确的,但是由于在第一个索引处的对象上使用 +
,您丢失了其他索引处的对象。您需要使用附加运算符+=
如果它是要添加的“第一个”对象,请使用对象指示符 .[0]
添加您选择的记录。
此外,使用带双引号的 shell 变量也不是将 JSON shell 内容导入到 jq
程序的正确方法。使用--argjson
选项直接导入
jq --argjson new '{ "newProperty":"new_value", "anotherNewProperty":"another_new_value" }' \
'.[0].properties.hardwareProfile += $new' json
或者使用将 JSON 内容括在单引号内的变量
VM_SIZE_INFO='{ "newProperty":"new_value", "anotherNewProperty":"another_new_value" }'
并在做
jq --argjson new "$VM_SIZE_INFO" '.[0].properties.hardwareProfile += $new' json
关于json - 使用 jq 将记录添加到特定索引处的数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62941158/