我正在尝试从AWS查询中解析json。我正在尝试获取RedrivePolicy.deadLetterTargetArn
所以,如果我愿意的话:
--output text --query "Attributes.RedrivePolicy"
输出:
{"deadLetterTargetArn":"arn:aws:sqs:us-east-2:xxxxxx:cloud-us-east-2-deadletter","maxReceiveCount":4}
是正确的
当我进入下一个级别时:
--output text --query "Attributes.RedrivePolicy.deadLetterTargetArn"
在输出中显示None
。
请在这里找到我的json:
{
"Attributes": {
"ApproximateNumberOfMessagesNotVisible": "0",
"Policy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Sid\":\"custodian-notify-subscription\",\"Effect\":\"Allow\",\"Principal\":{\"AWS\":\"*\"},\"Action\":\"SQS:SendMessage\",\"Resource\":\"arn:aws:sqs:us-east-2:xxxxxxxx:cloud-us-east-2\",\"Condition\":{\"ArnEquals\":{\"aws:SourceArn\":\"arn:aws:sns:us-east-2:xxxxxxxxx:cloud-us-east-2-notify\"}}}]}",
"MessageRetentionPeriod": "86400",
"ApproximateNumberOfMessagesDelayed": "0",
"RedrivePolicy": "{\"deadLetterTargetArn\":\"arn:aws:sqs:us-east-2:xxxxxxxxx:cloud-us-east-2-deadletter\",\"maxReceiveCount\":4}",
"MaximumMessageSize": "262144",
"CreatedTimestamp": "1561753144",
"ApproximateNumberOfMessages": "0",
"ReceiveMessageWaitTimeSeconds": "10",
"DelaySeconds": "0",
"KmsDataKeyReusePeriodSeconds": "300",
"VisibilityTimeout": "600",
"LastModifiedTimestamp": "1561753144",
"QueueArn": "arn:aws:sqs:us-east-2:xxxxxxxx:cloud-us-east-2"
}
}
答案 0 :(得分:0)
--query
关键字对JSON字符串进行JMESPath查询,则不会产生预期的结果了解示例为何无法产生预期结果的关键是将JSON string
元素与JSON object
元素区分开来。
我们在下面提供一些示例,这些示例具有极其简化的JSON场景,有助于说明此处发生的情况。
object
元素。object
。
object
组成
object
具有两个名称/值对 // Original JSON
{
"Message": {"Greeting":"Hello","Audience":"World!"}
}
// JMESPath query
--query 'Message.Greeting'
// JMESPath result
'Hello'
在此示例中,我们使用JMESPath查询JSON。由于要查询JSON string
元素,因此我们得到了不必要的结果。
object
。
string
组成
string
类似于JSON对象,但它不是JSON对象,因为它遵循JSON string
的约定 // Original JSON
{
"Message": "{\"Greeting\":\"Hello\",\"Audience\":\"World!\"}"
}
// JMESPath query
--query 'Message.Greeting'
// JMESPath result
None (null result)