【问题标题】:how to add a list of JSON values into keys with JQ如何使用 JQ 将 JSON 值列表添加到键中
【发布时间】:2020-06-09 18:13:39
【问题描述】:

我有一个输入文件:

{
  "errands": [
    {
      "name": "broker-deregistrar",
      "label": "Deregister and Purge Instances",
      "impact_warning": null,
      "pre_delete": true
    },
    {
      "name": "delete-all-service-instances",
      "label": "Delete All Service Instances",
      "impact_warning": null,
      "pre_delete": true
    },
    {
      "name": "deregister-broker",
      "label": "Deregister On-Demand Service Broker",
      "impact_warning": null,
      "pre_delete": true
    }
  ]
}

我想重新格式化它以使.name 的值成为具有固定值的键,如下所示:

{
"deploy_products": "all",
"errands": {
    "product_1_guid": {
      "run_pre_delete": {
        "broker-deregistrar": true,
        "delete-all-service-instances": true,
        "deregister-broker": true
      }
    }
  },
  "ignore_warnings": true
}

我可以使用这个过滤器对我想要的值进行子集化:

.errands[].name

这给了我:

"broker-deregistrar"
"delete-all-service-instances"
"deregister-broker"

但我想将选定的值作为键获取到新的 JSON 中。

虽然这种方法有效,

.errands=(.product_1_guid=(.run_pre_delete=(.xxx=true | .yyy=true | .zzz=true)))

差事名称列表是可变的,因为它们具有不同的名称和计数。即,差事列表可能只是“删除应用程序”,甚至什么都没有。

在上面的示例中,我需要 .xxx.yyy.zzz 来自原始 JSON。

【问题讨论】:

    标签: json jq


    【解决方案1】:

    在数组构造函数中生成 name-true 对,以便您可以轻松地将它们与 add 合并并将结果放在它所属的任何位置。

    {
      deploy_products: "all",
      errands: {
        product_1_guid: {
          run_pre_delete: [
            { (.errands[].name): true }
          ] | add
        }
      },
      ignore_warnings: true
    }
    

    Online demo

    【讨论】:

      猜你喜欢
      • 2022-12-06
      • 2021-02-17
      • 2021-08-03
      • 2016-04-08
      • 1970-01-01
      • 1970-01-01
      • 2017-11-10
      • 2021-11-21
      • 1970-01-01
      相关资源
      最近更新 更多