如何使用JQ解析AWS Auto Scaling生命周期钩子SQS消息中转义引号的Body
解析AWS Auto Scaling生命周期钩子的SQS消息(Body含转义JSON)
核心解决方案
使用jq内置的fromjson函数,将Body字段中的转义JSON字符串转换为标准JSON对象:
jq '.Messages[] | .Body |= fromjson' your-sqs-message-file.json
分步解释
- 遍历消息数组:
.Messages[]会逐个处理SQS返回的每条消息 - 解析转义内容:
.Body |= fromjson会把Body里的转义字符串解析为可操作的JSON结构,后续可以直接访问Body内的字段,比如提取EC2实例ID:jq '.Messages[] | .Body |= fromjson | .Body.EC2InstanceId' your-sqs-message-file.json
验证效果
用你提供的示例消息执行上述命令后,Body字段会被解析为正常的JSON对象,输出结果如下:
{ "Body": { "Origin": "AutoScalingGroup", "LifecycleHookName": "termination_lifecycle_hook", "Destination": "EC2", "AccountId": "<redacted>", "RequestId": "65e1eaeb-1bde-42ef-93b5-ac14987a2848", "LifecycleTransition": "autoscaling:EC2_INSTANCE_TERMINATING", "AutoScalingGroupName": "test-um-prod-20230822043811258400000005", "Service": "AWS Auto Scaling", "Time": "2023-08-29T20:42:36.581Z", "EC2InstanceId": "i-02ca28b1a415a4d48", "LifecycleActionToken": "1e7f23b9-4a9a-4cad-9051-6039d815e9b1" }, "ReceiptHandle": "AQEBN8E7SCNS44lemWqlfMVvOl9EfGo7Yb5b+VhF5jXlw2i41pwQJFvfaAFwBEquO8SOsGyaIUfFiE9qEUQoQOgyUoz5a+Rx/yD9jq2qfz/gRcSwhfCAPHyBvhjJdIGmlyKtNnTzuL183Wti4BO4G+Z7bLzn/WiIT+JrSfn/VofI34HnB0w0Om3UYTnd6OoXuCu2WxzasyMeFcImuCYdt+5+tMzauEtsL7EVdSZwpW3S4oatkuxfzzyxHsP4X0IIKt6fwIzHzCRhi9kmo5QnZAQCnjHo+RBNZXWU9wbk3SToE3nCdLJhbups5SOHAUHLO1PwdVb7RvKMmYYdHfzoTQBLeWJ1w7MEMrhANC9uOu7cVzS0hAAc9qPLzzoV1TkIBn/0Q597cl6dNyfkWpPQEOKtUg==", "MD5OfBody": "fa2bc63f28d96c532288b09831a8b73f", "MessageId": "4c5b0c2c-9085-4bde-8de3-49ae3f63afd4" }
这种方式无需修改AWS端的任何配置——SQS将嵌套JSON作为转义字符串传递是标准行为,通过jq的fromjson即可完美解决解析问题。
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

