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

标签 json jq

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

相关文章:

json - 无法将特殊字符发布到对话流查询中

bash - 为 jq 数组中的每一项运行一个命令

json - 如何使用jq过滤包含混合类型元素的数组

json - 使用 jq 连接和过滤 JSON 文件

json - jq:根据键从数组中删除对象

Javascript:加载页面时出错

c# - 如何反序列化(JSON)实现接口(interface) : error no parameterless constructor defined? 的类类型的对象

json - 什么linux命令可以将新的字段键值对添加到json文件

json - 使用 jq 在我的 JSON 中搜索和替换时遇到问题

android - Google Books api 未提供输出