0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

jqチートシート

Last updated at Posted at 2024-05-26

サマリ

個人的によく使うjqコマンドの備忘録。
適宜で追加予定(多分)

詳細

jq使いたくなる時の状況として大体がクソデカjsonのparse用なので、サンプルも大きなものを用意。
生成方法としては適当にAWS EC2インスタンスを立てて、そのconfigをjson形式で出力した。

sample.json
{
    "Reservations": [
        {
            "Groups": [],
            "Instances": [
                {
                    "AmiLaunchIndex": 0,
                    "ImageId": "ami-0595d6e81396a9efb",
                    "InstanceId": "i-0af291a70792eedcc",
                    "InstanceType": "t2.micro",
                    "KeyName": "MyKeyPair",
                    "LaunchTime": "2024-05-04T14:12:50+00:00",
                    "Monitoring": {
                        "State": "disabled"
                    },
                    "Placement": {
                        "AvailabilityZone": "ap-northeast-1c",
                        "GroupName": "",
                        "Tenancy": "default"
                    },
                    "PrivateDnsName": "ip-172-31-9-174.ap-northeast-1.compute.internal",
                    "PrivateIpAddress": "172.31.9.174",
                    "ProductCodes": [],
                    "PublicDnsName": "ec2-18-181-216-211.ap-northeast-1.compute.amazonaws.com",
                    "PublicIpAddress": "18.181.216.211",
                    "State": {
                        "Code": 16,
                        "Name": "running"
                    },
                    "StateTransitionReason": "",
                    "SubnetId": "subnet-0e107b67fa58f9d8e",
                    "VpcId": "vpc-08502774e7262a266",
                    "Architecture": "x86_64",
                    "BlockDeviceMappings": [
                        {
                            "DeviceName": "/dev/sda1",
                            "Ebs": {
                                "AttachTime": "2024-05-04T14:12:51+00:00",
                                "DeleteOnTermination": true,
                                "Status": "attached",
                                "VolumeId": "vol-0284e71624766a1a4"
                            }
                        }
                    ],
                    "ClientToken": "daf82584-2b91-4c32-b310-4a38cbfab382",
                    "EbsOptimized": false,
                    "EnaSupport": true,
                    "Hypervisor": "xen",
                    "NetworkInterfaces": [
                        {
                            "Association": {
                                "IpOwnerId": "amazon",
                                "PublicDnsName": "ec2-18-181-216-211.ap-northeast-1.compute.amazonaws.com",
                                "PublicIp": "18.181.216.211"
                            },
                            "Attachment": {
                                "AttachTime": "2024-05-04T14:12:50+00:00",
                                "AttachmentId": "eni-attach-08c3c7f2a0b6102cd",
                                "DeleteOnTermination": true,
                                "DeviceIndex": 0,
                                "Status": "attached",
                                "NetworkCardIndex": 0
                            },
                            "Description": "",
                            "Groups": [
                                {
                                    "GroupName": "default",
                                    "GroupId": "sg-0190b89b3d4a36149"
                                }
                            ],
                            "Ipv6Addresses": [],
                            "MacAddress": "0a:cf:9e:fc:4a:11",
                            "NetworkInterfaceId": "eni-0e13d5d8e11546e9d",
                            "OwnerId": "471112995230",
                            "PrivateDnsName": "ip-172-31-9-174.ap-northeast-1.compute.internal",
                            "PrivateIpAddress": "172.31.9.174",
                            "PrivateIpAddresses": [
                                {
                                    "Association": {
                                        "IpOwnerId": "amazon",
                                        "PublicDnsName": "ec2-18-181-216-211.ap-northeast-1.compute.amazonaws.com",
                                        "PublicIp": "18.181.216.211"
                                    },
                                    "Primary": true,
                                    "PrivateDnsName": "ip-172-31-9-174.ap-northeast-1.compute.internal",
                                    "PrivateIpAddress": "172.31.9.174"
                                }
                            ],
                            "SourceDestCheck": true,
                            "Status": "in-use",
                            "SubnetId": "subnet-0e107b67fa58f9d8e",
                            "VpcId": "vpc-08502774e7262a266",
                            "InterfaceType": "interface"
                        }
                    ],
                    "RootDeviceName": "/dev/sda1",
                    "RootDeviceType": "ebs",
                    "SecurityGroups": [
                        {
                            "GroupName": "default",
                            "GroupId": "sg-0190b89b3d4a36149"
                        }
                    ],
                    "SourceDestCheck": true,
                    "VirtualizationType": "hvm",
                    "CpuOptions": {
                        "CoreCount": 1,
                        "ThreadsPerCore": 1
                    },
                    "CapacityReservationSpecification": {
                        "CapacityReservationPreference": "open"
                    },
                    "HibernationOptions": {
                        "Configured": false
                    },
                    "MetadataOptions": {
                        "State": "applied",
                        "HttpTokens": "optional",
                        "HttpPutResponseHopLimit": 1,
                        "HttpEndpoint": "enabled",
                        "HttpProtocolIpv6": "disabled",
                        "InstanceMetadataTags": "disabled"
                    },
                    "EnclaveOptions": {
                        "Enabled": false
                    },
                    "BootMode": "uefi-preferred",
                    "PlatformDetails": "Linux/UNIX",
                    "UsageOperation": "RunInstances",
                    "UsageOperationUpdateTime": "2024-05-04T14:12:50+00:00",
                    "PrivateDnsNameOptions": {
                        "HostnameType": "ip-name",
                        "EnableResourceNameDnsARecord": false,
                        "EnableResourceNameDnsAAAARecord": false
                    },
                    "MaintenanceOptions": {
                        "AutoRecovery": "default"
                    },
                    "CurrentInstanceBootMode": "legacy-bios"
                }
            ],
            "OwnerId": "471112995230",
            "ReservationId": "r-05fea8fdf1007909f"
        }
    ]
}

要素確認

# トップレベルのjson propertyを確認
$  cat sample.json | jq 'keys'
[
  "Reservations"
]

直接参照する

# 配列参照
$  cat sample.json | jq  'keys[0]'
"Reservations"

# -rオプションでダブルクォーテーションが外せる
$  cat sample.json | jq -r  'keys[0]'
Reservations

ネストされた要素の確認

$  cat sample.json | jq  '.Reservations | keys'
[
  0,
  1
]

# 配列参照
$  cat sample.json | jq  '.Reservations[0] | keys'
[
  "Groups",
  "Instances",
  "OwnerId",
  "ReservationId"
]

更にネストされた要素の確認

# 同様の記述で参照が出来る
$  cat sample.json | jq  '.Reservations[0].Instances | keys'
[
  0
]

# 配列参照
$  cat sample.json | jq  '.Reservations[0].Instances[0] | keys'
[
  "AmiLaunchIndex",
  "Architecture",
  "BlockDeviceMappings",
  "BootMode",
  "CapacityReservationSpecification",
  "ClientToken",
  "CpuOptions",
  "CurrentInstanceBootMode",
  "EbsOptimized",
  "EnaSupport",
  "EnclaveOptions",
  "HibernationOptions",
  "Hypervisor",
  "ImageId",
  "InstanceId",
  "InstanceType",
  "KeyName",
  "LaunchTime",
  "MaintenanceOptions",
  "MetadataOptions",
  "Monitoring",
  "NetworkInterfaces",
  "Placement",
  "PlatformDetails",
  "PrivateDnsName",
  "PrivateDnsNameOptions",
  "PrivateIpAddress",
  "ProductCodes",
  "PublicDnsName",
  "PublicIpAddress",
  "RootDeviceName",
  "RootDeviceType",
  "SecurityGroups",
  "SourceDestCheck",
  "State",
  "StateTransitionReason",
  "SubnetId",
  "UsageOperation",
  "UsageOperationUpdateTime",
  "VirtualizationType",
  "VpcId"
]

特定要素の値を取得する

Reservations.Instancesのプロパティ参照する

単一取得

# 直接プロパティ名を指定する。"."を接頭するのを忘れないように
$  cat sample.json | jq  '.Reservations[0].Instances[0] | .VpcId'
"vpc-08502774e7262a266"

複数取得

# 複数出力の場合、出力形式をkey-value型にしないとerrorになる
$ cat sample.json | jq  '.Reservations[0].Instances[0] | {VpcId: .VpcId, VirtualizationType: .VirtualizationType}'
{
  "VpcId": "vpc-08502774e7262a266",
  "VirtualizationType": "hvm"
}
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?