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/