快速提问: 当我通过命令行工具从 pubsub 订阅中提取消息时
gcloud beta pubsub subscriptions pull MY_SUB
我得到一个表格,其中(所有详细信息和)数据作为字符串(已解码) 但我想用它,所以我这么做了:
gcloud beta pubsub subscriptions pull MY_SUB --format=json
我收到一个包含(所有详细信息)的 json,但数据已编码。
有办法通过格式化来解析它吗?
发布消息示例:
gcloud beta pubsub topics publish myTopic "Topic Message" --attribute=Ai=A,Bee=B
无格式化_返回
─────────────┬─────────────────┬────────────────┬─────────────────────────
──────────────────────────────────────────────────────────────────────────
─────────────────────────────────────────────────────────────┐
│ DATA │ MESSAGE_ID │ ATTRIBUTES │
ACK_ID
│
├─────────────┼─────────────────┼────────────────┼────────────────────────
──────────────────────────────────────────────────────────────────────────
──────────────────────────────────────────────────────────────┤
│ Topic Message │ 122122177601805 │ Ai=A Bee=B │ ACK_ID... │
└─────────────┴─────────────────┴────────────────┴────────────────────────
──────────────────────────────────────────────────────────────────────────
──────────────────────────────────────────────────────────────┘
格式化
[
{
"ackId": "ACK_ID..",
"message": {
"attributes": {
"Ai": "A",
"Bee": "B"
},
"data": "SGVsbG8gVG9waWM=",
"messageId": "122121955409996",
"publishTime": "2017-05-11T10:26:54.143Z"
}
}
]
--format
参数,您走在正确的轨道上,但您需要使用投影来解码数据。在这种情况下,您需要使用 decode()
投影。以下是如何使用相同的数据执行相同的命令,但消息的数据是经过 Base64 解码的。
gcloud beta pubsub subscriptions pull MY_SUB --format="json(ackId, message.attributes, message.data.decode(\"base64\").decode(\"utf-8\"), message.messageId, message.publishTime)"
[
{
"ackId": "QV5AEkw...D5-NTlF",
"message": {
"attributes": {
"Ai": "A",
"Bee": "B"
},
"data": "Topic Message",
"messageId": "127236468931635",
"publishTime": "2017-05-29T23:15:04.637Z"
}
}
]
这适用于我的用例:
gcloud pubsub subscriptions pull test-sub --format="table[no-heading](DATA)" > alert.json
当我尝试上述示例时,我不断收到错误:
base64:输入无效
jq:错误(在 pull.json:10):字符串(“ewogICJpbm...)不是有效的 base64 数据