29/03/2022

Bash ile Json parsing

Bir json dosyasında bir değişkene erişmek göründüğünden zor. Awk ve sed ile bir yere kadar ancak bunun bir yolu daha var oda linuxte jq kurmak.

Örnek bir json dosyası

 aws ec2 describe-vpcs --vpc-ids

{
  "Vpcs": [
    {
      "CidrBlock": "172.31.0.0/16",
      "DhcpOptionsId": "dopt-02a03b6622a8424ff",
      "State": "available",
      "VpcId": "vpc-0dc9592233b0a9ca7",
      "OwnerId": "0000000000000000000",
      "InstanceTenancy": "default",
      "CidrBlockAssociationSet": [
        {
          "AssociationId": "vpc-cidr-assoc-0975cc57334539648",
          "CidrBlock": "172.31.0.0/16",
          "CidrBlockState": {
            "State": "associated"
            }
          }
        ],
      "IsDefault": true
    }
  ]
}

Bu durumda VpcId yi öğrenmek istersek

$ aws ec2 describe-vpcs | jq .Vpcs[].VpcId -r

vpc-0dc9592233b0a9ca7

Burada detaylara bakarsak pipedan sonra önce mutlaka “.” nokta koyuyoruz.

Önce en dış JSON OBJECT Vpcs, sonra bu object içinde array olduğu için “[ ]” sonrada VpcId.

yani : .Vpcs[].VpcId

Eğer CıdrBlockState değerini öğrenmek istersek

$ cat json_ornek.txt |jq .Vpcs[].CidrBlockAssociationSet[].CidrBlockState.State
"associated"
  • CidrBlockAssociationSet den sonra [] var çünkü bu objenin içinde de array var.
  • CidrBlockState den sonra birşey yok çünkü array objesi barındırmıyor.
  • çıkan sonuç string tipinde eğer ” görmek istemiyorsak -r kullanırız.(örneğin bash te bir değişkene atıyorsak
$ jsonObject=$(cat json_ornek.txt |jq .Vpcs[].CidrBlockAssociationSet[].CidrBlockState.State -r)

associated

Ilginc bir link https:// blog . appoptics.com /jq-json/

Leave a Reply