【问题标题】:Add records to an array element at a specific index using jq使用 jq 将记录添加到特定索引处的数组元素
【发布时间】:2020-07-16 18:18:57
【问题描述】:

我正在尝试使用 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。

我该怎么做?谢谢!

【问题讨论】:

  • 我已经添加了最接近我需要的结果的内容。

标签: json jq


【解决方案1】:

您的想法是正确的,但是由于在第一个索引处的对象上使用+,您丢失了其他索引处的对象。您需要使用附加运算符+=

如果它是要添加的“第一个”对象,请使用对象指示符 .[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

【讨论】:

    猜你喜欢
    • 2021-08-14
    • 1970-01-01
    • 1970-01-01
    • 2021-11-26
    • 2021-08-19
    • 1970-01-01
    • 2013-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多