Json 如何使用jq将多个输出对象组合成单个对象

Json 如何使用jq将多个输出对象组合成单个对象,json,key,transform,jq,Json,Key,Transform,Jq,我正在尝试解析terraform状态文件的输出 { "version": 3, "terraform_version": "0.9.3", "serial": 0, "lineage": "ae1f2572-8fa6-4977-be73-3deac7529eff", "modules": [ { "path": [ "root" ], "

我正在尝试解析terraform状态文件的输出

{
    "version": 3,
    "terraform_version": "0.9.3",
    "serial": 0,
    "lineage": "ae1f2572-8fa6-4977-be73-3deac7529eff",
    "modules": [
        {
            "path": [
                "root"
            ],
            "outputs": {
                "elb_dns_name": {
                    "sensitive": false,
                    "type": "string",
                    "value": "web-elb-1019323532.us-east-1.elb.amazonaws.com"
                }
            },
            "resources": {},
            "depends_on": []
        },
        {
            "path": [
                "root",
                "elb"
            ],
            "outputs": {
                "dns_name": {
                    "sensitive": false,
                    "type": "string",
                    "value": "web-elb-1019323532.us-east-1.elb.amazonaws.com"
                }
            },
            "depends_on": []
        },
        {
            "path": [
                "root",
                "sg"
            ],
            "outputs": {
                "security_group_id": {
                    "sensitive": false,
                    "type": "string",
                    "value": "sg-5a677425"
                }
            },
            "depends_on": []
        },
        {
            "path": [
                "root",
                "web"
            ],
            "outputs": {
                "web_instance_ids": {
                    "sensitive": false,
                    "type": "string",
                    "value": "i-03676fa6ba43fbb9f,i-09f51a313146856cd"
                },
                "web_public_ips": {
                    "sensitive": false,
                    "type": "string",
                    "value": "34.207.194.186,34.203.236.205"
                }
            },
            "depends_on": []
        }
    ]
}
我想返回一个json对象,其中输出名称是键,值是输出值。就像在这个例子中

{
  "elb_dns_name": "web-elb-1019323532.us-east-1.elb.amazonaws.com",
  "dns_name": "web-elb-1019323532.us-east-1.elb.amazonaws.com",
  "security_group_id": "sg-5a677425",
  "web_instance_ids": "i-03676fa6ba43fbb9f,i-09f51a313146856cd",
  "web_public_ips": "34.207.194.186,34.203.236.205"
}
我只能使用这个
.modules[]|.outputs | to| u entries | map({(.key):.value.value})| add

{
  "elb_dns_name": "web-elb-1019323532.us-east-1.elb.amazonaws.com"
}
{
  "dns_name": "web-elb-1019323532.us-east-1.elb.amazonaws.com"
}
{
  "security_group_id": "sg-5a677425"
}
{
  "web_instance_ids": "i-03676fa6ba43fbb9f,i-09f51a313146856cd",
  "web_public_ips": "34.207.194.186,34.203.236.205"
}
所以出于某种原因我不能发布,因为stackoverflow说我有太多的代码,没有足够的细节。。。所以现在我在写日记,以便输入足够的内容,我可以点击提交按钮。。。随时。。。任何数量的字符现在


好吧,当我不在工作中构建代码管道时,我真的很喜欢玩dota2。只是我觉得我在这方面很差劲。我的意思是我有1200个小时的gam,但我仍然像1.5公里的MMR垃圾

我最终找到了一个解决方案,但所花的时间比应该的要长(几个小时)。基本上,如果你在任何时候丢失了列表中的
,你就会把事情搞砸

这就是我使用的
.modules |映射(.outputs | to_entries[]|{(.key):.value.value})|添加


它可以工作,但可能是一种更好的方法。

使用
map\u值
可以产生更简单(或至少更短)的过滤器,并且可能更有效:

.modules | map(.outputs | map_values(.value) ) | add

没有太多的代码,也没有太多的数据。您希望读者能够通过您的整个问题数据集进行解析,而您应该能够在您包含的数据的1/2、1/3、1/4中演示您的问题。你应该读一下;-)。祝你好运。@Sheller我认为这个案例需要包含整个数据集。如果你看看我尝试的查询和我找到的解决方案,你会发现我必须从头开始。我本可以删掉大部分文本的参考资料键,但我并不觉得包含整个对象是件坏事,而且我仍然没有。