JMESPATH 使用小结

JMESPath 使用小结


使用AWS CLI时,为了使输出更直观,我们可以选择table显示方式。除此之外,我们还会遇到一个选项 –query,很多人都忽略了这个选项,其实它还是非常有用的,它可以让命令输出结果按照你的想法呈现出来,而不是夹杂一大堆无用的信息让你自己去辨认。举个很简单的例子,在查找AMI的时候,如果你只想看到AMI的Name和ImageId而忽略其他无关信息,你可以这样写:

aws ec2 describe-images --query 'Images[*].{Name:Name, ImageId:ImageId}'

它的输出会很简单明了:

[
    {
        "Name": "pv-grub-hd0_1.04-i386.gz", 
        "ImageId": "aki-908f1da9"
    }, 
    {
        "Name": "pv-grub2-hd0_2.02-1.b2-x86_64.xz", 
        "ImageId": "aki-9c4ad8a5"
    }
]

这是什么原理呢?其实并没有什么高深的东西,–query只是使用了JMESPATH对命令行返回的JSON输出进行了解析提取而已。下面,我将对JMESPATH的使用进行一个简单的总结。语法比较简单,这里主要以常见表达式及相应的示例进行说明。

identifier

  • key
    e.g.
    解析 {"key": "value"}   
    key   ->  value

slice

  • [start:end:step]
  • [:index], [index:], [::-1]
    e.g.
    解析 [e0, e1, e2, e3, e4, e5, e6]
    [1:4:2]   ->  [e1, e3]
    [:3]  ->  [e0,e1,e2]
    [4:]  ->  [e4,e5,e6]
    [::-1]  ->  [e6,e5,e4,e3,e2,e1,e0]

projection

  • list projection for all [*].
  • list projection for slice [start:end:step].
  • object projection .*.
    e.g.
    解析 
        {"Images":
            [
                {"ImageId": "xxxxx1", "Name": "yyyyy1"}, 
                {"ImageId": "xxxxx2", "Name": "yyyyy2"}
            ]
        }
    Images[*].ImageId  -> [xxxxx1, xxxxx2]
    Images[0:1:1].Name -> [yyyyy1]
    Images[].* ->  [[xxxxx1,yyyyy1],[xxxxx2,yyyyy2]] 

flat projection

  • []
    e.g.
    解析 [1,[2,[3,4]],5,[6,7]]
    []  ->  [1,2,[3,4],5,6,7]
    [][]  ->  [1,2,3,4,5,6,7]

filter

  • [?condition]
    e.g.
    解析 
    {"Volumes": 
        [
            {
                "Name": "v1",
                "Size": 100
            },
            {
                "Name": "v2",
                "Size": 500
            }
        ]
    }
    Volumes[?Size>`200`].Name  ->  ["v2"]

multi-select list

  • .[key1,key2]
    e.g.
    解析 
        {
            "Images":
            [
                {"Name": "ami1", "Size": 100, "Type": "t1"},
                {"Name": "ami2", "Size": 200, "Type": "t2"}
            ]
        }
        Images[*].[Name, Size]  ->  [["ami1", 100], ["ami2", 200]]

multi-select hash

  • .{Key1:Key1, Key2:Key2}
    e.g.
    解析 6 中json串
    Images[*].{Name:Name}  ->  [{"Name": "ami1"}, {"Name": "ami2"}]

function

  • contains(str, substr)

  • e.g.
    解析 6 中json串
    Images[?contains(Name, `ami`)].Type  ->  ["t1", "t2"]

PIPE

  • |
    e.g.
    解析 6 中json串
    Images[*].[Name, Size] | [1]  ->  ["ami2", 200]

常用

  • ec2 describe-instances --query 'Reservations[].Instances[?KeyName==`mykey`][]|[?State.Name==`running`].[InstanceId, Tags[?Key==`N
    ame`].Value|[0]]'
  • aws ec2 describe-instances --query 'Reservations[].Instances[].{InstanceId: InstanceId, Key: Tags[?Key==`Name`]}[]|[?Key[?contains(Value,`test`)]].InstanceId'
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值