Json 使用jq将记录添加到特定索引处的数组元素中

Json 使用jq将记录添加到特定索引处的数组元素中,json,jq,Json,Jq,我试图使用jq向特定数组元素中的特定键添加值。我有以下JSON: [ { "name":"element1", "properties":{ "hardwareProfile":{ "vmSize":"vm_size" } } }, { "na

我试图使用jq向特定数组元素中的特定键添加值。我有以下JSON:

[
   {
      "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

我已经添加了迄今为止最接近我需要的结果的东西。