jq - 如何使用 JQ 正确过滤
问题描述
我有这个:
{
"LaunchTemplateVersions": [
{
"LaunchTemplateId": "lt-xxxxxx",
"LaunchTemplateName": "dev-xxxxxx",
"VersionNumber": 1,
"VersionDescription": "dev-xxxxx",
"CreateTime": "2021-04-28T06:12:15+00:00",
"CreatedBy": "arn:aws:sts::xxxxx",
"DefaultVersion": true,
"LaunchTemplateData": {
"BlockDeviceMappings": [
{
"DeviceName": "/dev/xvda",
"Ebs": {
"Encrypted": true,
"DeleteOnTermination": true,
"KmsKeyId": "arn:aws:kms:xxxx",
"SnapshotId": "snap-xxxx",
"VolumeSize": 800,
"VolumeType": "gp2"
}
}
我需要获取以下值:
- “设备名称”
- “KmsKeyId”
- “体积大小”
正在做:jq -r '.LaunchTemplateVersions[].LaunchTemplateData[].DeviceName'
确实返回:无法使用字符串“DeviceName”索引数组
我想问题是我怎样才能做到这一点,但我怎样才能自己理解 JQ 过滤,比如知道规则等。
泰
解决方案
假设说明性输入已以明显的方式更正,使其成为有效的 JSON,则调用:
jq -r '
.LaunchTemplateVersions[].LaunchTemplateData.BlockDeviceMappings[]
| (.DeviceName, .Ebs.KmsKeyId,.Ebs.VolumeSize)' input.json
会产生:
/dev/xvda
arn:aws:kms:xxxx
800
学习资源
既然你问到了学习资源,让我提一下,除了jq wiki上提到的资源之外,你可能还想浏览一下我写的指南:A Stream-Oriented Introduction to jq。
推荐阅读
- javascript - 信息在 Redux 商店提供之前被渲染?
- python - 如何在Python中将可变数量的字典组合成一个字典?
- quasar-framework - 如何使类星体中的 q-input 分量更小?
- regex - 使用 Google Sheets Re2 正则表达式语法提取匹配地址
- linux - 附加两个 TXT 文件的 Linux 命令
- c# - .NET core 5.0 脚手架登录页面显示“需要 returnUrl 字段”(Blazor 服务器端)
- ios - .append 更改 Swift 数组中添加的元素
- javascript - 为什么这种 Javascript 数据类型(看起来像一个对象)似乎有某种用于识别它的键?
- jsf - 无法解析文档“jndi:/server/WebApplication2/WEB-INF/faces-config.xml”:null
- c++ - 对接口类使用互斥锁会导致派生类出现问题:“无法引用函数,因为它是已删除的函数”