Json 使用jq将记录添加到特定索引处的数组元素中
我试图使用jq向特定数组元素中的特定键添加值。我有以下JSON:Json 使用jq将记录添加到特定索引处的数组元素中,json,jq,Json,Jq,我试图使用jq向特定数组元素中的特定键添加值。我有以下JSON: [ { "name":"element1", "properties":{ "hardwareProfile":{ "vmSize":"vm_size" } } }, { "na
[
{
"name":"element1",
"properties":{
"hardwareProfile":{
"vmSize":"vm_size"
}
}
},
{
"name":"element2",
"properties":{
"hardwareProfile":{
"vmSize":"vm_size"
}
}
}
]
我想向第一个元素中的属性.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
我该怎么做?谢谢 您的想法是正确的,但是由于在第一个索引处对对象使用了
+
,因此您丢失了其他索引处的对象。您需要使用append操作符+=
如果是要添加的“第一个”对象,请使用对象指示符[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
我已经添加了迄今为止最接近我需要的结果的东西。