使用 jq 返回多个元素?

Kel*_*ton 3 json jq

我正在尝试使用 jq 从 JSON 对象返回多个元素。数据来自 AWS cli 查找,这只是输出的一小部分:

{
"ReservedInstancesOfferings": [{
        "OfferingClass": "convertible",
        "OfferingType": "No Upfront",
        "AvailabilityZone": "ap-southeast-2a",
        "InstanceTenancy": "default",
        "PricingDetails": [],
        "ProductDescription": "Linux/UNIX",
        "UsagePrice": 0.0,
        "RecurringCharges": [{
            "Amount": 0.167,
            "Frequency": "Hourly"
        }],
        "Marketplace": false,
        "CurrencyCode": "USD",
        "FixedPrice": 0.0,
        "Duration": 94608000,
        "Scope": "Availability Zone",
        "ReservedInstancesOfferingId": "1fc8c02b-bcc0-42b8-82ef-47c6f6d1c1b5",
        "InstanceType": "c4.xlarge"
    },
    {
        "OfferingClass": "convertible",
        "OfferingType": "No Upfront",
        "AvailabilityZone": "ap-southeast-2a",
        "InstanceTenancy": "dedicated",
        "PricingDetails": [],
        "ProductDescription": "Red Hat Enterprise Linux",
        "UsagePrice": 0.0,
        "RecurringCharges": [{
            "Amount": 0.243,
            "Frequency": "Hourly"
        }],
        "Marketplace": false,
        "CurrencyCode": "USD",
        "FixedPrice": 0.0,
        "Duration": 94608000,
        "Scope": "Availability Zone",
        "ReservedInstancesOfferingId": "24aaceee-f54e-4882-aba3-ce710a5036c9",
        "InstanceType": "c4.xlarge"
    }
]
Run Code Online (Sandbox Code Playgroud)

}

我正在尝试提取字段:

.ReservedInstancesOfferings[].ProductDescription
.ReservedInstancesOfferings[].InstanceType
.ReservedInstancesOfferings[].RecurringCharges[].Amount
Run Code Online (Sandbox Code Playgroud)

我希望输出看起来像这样:

"Red Hat Enterprise Linux"
"c4.xlarge"
0.183
Run Code Online (Sandbox Code Playgroud)

正如您在上面看到的,我了解如何单独提取所有元素,但我无法弄清楚如何将它们全部放在一起以获得所需的输出。我已经用逗号分隔查询,但这并没有提供所需的输出。

任何帮助将非常感激。

谢谢你!

编辑:

哦哦,我明白了!完整答案如下。男孩哦男孩jq太强大了!

希望这对某人有帮助:)

Kel*_*ton 7

好的,所以我设法得到了我想要的东西。我仍然需要做一些整理工作,因为一些输入字段并不完全统一,但它已经足够接近,可以继续进行:

aws ec2 describe-reserved-instances-offerings --availability-zone "ap-southeast-2a" --instance-type "c4.xlarge" |
jq '.ReservedInstancesOfferings[] | [.ProductDescription, .InstanceType, .RecurringCharges[].Amount]'
Run Code Online (Sandbox Code Playgroud)

输出:

[
  "Linux/UNIX",
  "c4.xlarge",
  0.167
]
[
  "Red Hat Enterprise Linux",
  "c4.xlarge",
  0.243
]
[
  "Red Hat Enterprise Linux",
  "c4.xlarge",
  0.227
]
[
  "Linux/UNIX",
  "c4.xlarge",
  0.183
]
[
  "SUSE Linux",
  "c4.xlarge",
  0.2
]
Run Code Online (Sandbox Code Playgroud)