使用 JMESpath 构建对象
Object construction with JMESpath
我正在尝试使用 AWS CLI 构建一个 JMESpath 查询,该查询打印 table 将几个选定的属性显示为行。我可以使用 jq
得到我想要的东西,但我只想用 awscli
来做,这样它就可以格式化为 table。这可能吗?下面是我想要的输出,使用 jq
对象构造语法:
% aws --output json ec2 describe-instances --instance-id $id --query 'Reservations[].Instances[0]' | jq '.[0] | {InstanceType,PrivateIpAddress,LaunchTime}'
{
"InstanceType": "g4dn.4xlarge",
"PrivateIpAddress": "172.31.15.37",
"LaunchTime": "2021-02-17T14:49:30+00:00"
}
我最接近的是使用多选散列,但这会使每个项目成为一列,所以如果有多个项目,它看起来不太好。
% aws --output table ec2 describe-instances --instance-id $id --query 'Reservations[].Instances[0].{size: InstanceType, PrivateIP: PrivateIpAddress, LaunchTime: LaunchTime}'
---------------------------------------------------------------
| DescribeInstances |
+---------------------------+----------------+----------------+
| LaunchTime | PrivateIP | size |
+---------------------------+----------------+----------------+
| 2021-02-17T14:49:30+00:00| 172.31.15.37 | g4dn.4xlarge |
+---------------------------+----------------+----------------+
table
输出会将不同的 JSON 对象视为不同的行。
如果您确实打算每行有一个 属性,您可以使用 JMESPath 查询为每个 属性 创建一个对象,如下所示:
Reservations[].Instances[0].[ { Property: `LaunchTime`, Value: LaunchTime }, { Property: `Size`, Value: InstanceType }, { Property: `PrivateIP`, Value: PrivateIpAddress } ]
JSON 结构如:
{
"Reservations": [
{
"Instances": [
{
"InstanceType": "g4dn.4xlarge",
"PrivateIpAddress": "172.31.15.37",
"LaunchTime": "2021-02-17T14:49:30+00:00"
}
]
}
]
}
结果是 JSON:
[
[
{
"Property": "LaunchTime",
"Value": "2021-02-17T14:49:30+00:00"
},
{
"Property": "Size",
"Value": "g4dn.4xlarge"
},
{
"Property": "PrivateIP",
"Value": "172.31.15.37"
}
]
]
然后 table 应该看起来像:
----------------------------------------------
| DescribeInstances |
+--------------+-----------------------------+
| Property | Value |
+--------------+-----------------------------+
| LaunchTime | 2021-02-17T14:49:30+00:00 |
+--------------+-----------------------------+
| Size | g4dn.4xlarge |
+--------------+-----------------------------+
| PrivateIP | 172.31.15.37 |
+--------------+-----------------------------+
我正在尝试使用 AWS CLI 构建一个 JMESpath 查询,该查询打印 table 将几个选定的属性显示为行。我可以使用 jq
得到我想要的东西,但我只想用 awscli
来做,这样它就可以格式化为 table。这可能吗?下面是我想要的输出,使用 jq
对象构造语法:
% aws --output json ec2 describe-instances --instance-id $id --query 'Reservations[].Instances[0]' | jq '.[0] | {InstanceType,PrivateIpAddress,LaunchTime}'
{
"InstanceType": "g4dn.4xlarge",
"PrivateIpAddress": "172.31.15.37",
"LaunchTime": "2021-02-17T14:49:30+00:00"
}
我最接近的是使用多选散列,但这会使每个项目成为一列,所以如果有多个项目,它看起来不太好。
% aws --output table ec2 describe-instances --instance-id $id --query 'Reservations[].Instances[0].{size: InstanceType, PrivateIP: PrivateIpAddress, LaunchTime: LaunchTime}'
---------------------------------------------------------------
| DescribeInstances |
+---------------------------+----------------+----------------+
| LaunchTime | PrivateIP | size |
+---------------------------+----------------+----------------+
| 2021-02-17T14:49:30+00:00| 172.31.15.37 | g4dn.4xlarge |
+---------------------------+----------------+----------------+
table
输出会将不同的 JSON 对象视为不同的行。
如果您确实打算每行有一个 属性,您可以使用 JMESPath 查询为每个 属性 创建一个对象,如下所示:
Reservations[].Instances[0].[ { Property: `LaunchTime`, Value: LaunchTime }, { Property: `Size`, Value: InstanceType }, { Property: `PrivateIP`, Value: PrivateIpAddress } ]
JSON 结构如:
{
"Reservations": [
{
"Instances": [
{
"InstanceType": "g4dn.4xlarge",
"PrivateIpAddress": "172.31.15.37",
"LaunchTime": "2021-02-17T14:49:30+00:00"
}
]
}
]
}
结果是 JSON:
[
[
{
"Property": "LaunchTime",
"Value": "2021-02-17T14:49:30+00:00"
},
{
"Property": "Size",
"Value": "g4dn.4xlarge"
},
{
"Property": "PrivateIP",
"Value": "172.31.15.37"
}
]
]
然后 table 应该看起来像:
----------------------------------------------
| DescribeInstances |
+--------------+-----------------------------+
| Property | Value |
+--------------+-----------------------------+
| LaunchTime | 2021-02-17T14:49:30+00:00 |
+--------------+-----------------------------+
| Size | g4dn.4xlarge |
+--------------+-----------------------------+
| PrivateIP | 172.31.15.37 |
+--------------+-----------------------------+