我想为正在处理的数组中的每个JSON对象运行以下jq命令:
jq -r '.[].Messages | .[].MessageId' combinded.json
jq -r '.[].Messages | .[].Attributes.SentTimestamp|tonumber|(. /1000) | strftime("%Y-%m-%dT%H:%M:%S %Z")' combinded.json
jq -r '.[].Messages | .[].Body | fromjson | .fileLocation.key' combinded.json
输出应该显示为:MessageId, date-time, filelocation-key
我尝试了通常的方法,但都不起作用。有什么建议吗?
以下是JSON示例:[
{
"Messages": [
{
"MessageId": "3ee11508-b7d0-4116-aed4-8c4abe399fd4",
"Body": "{"key":"tmp/20220607_015010_163546.pgp","eTag":"506f370e6a184b38ae4ad9988e396384","versionId":null}",
"Attributes": {
"SentTimestamp": "1654581487500"
}
}
]
},
{
"Messages": [
{
"MessageId": "3ee11508-b7d0-4116-aed4-8c4abe399fd7",
"Body": "{"key":"tmp/20220607_015010_163547.pgp","eTag":"506f370e6a184b38ae4ad9988e396384","versionId":null}",
"Attributes": {
"SentTimestamp": "1654581487700"
}
}
]
}
]
用这3个过滤器创建一个数组,然后将其传递给join(", ")
(或@csv
,如果你不需要这些空格)
.[].Messages[] | [ .MessageId, (.Attributes.SentTimestamp | tonumber / 1000 | strftime("%Y-%m-%dT%H:%M:%S %Z")), (.Body | fromjson | .eTag) ] | join(", ")
给出(with--raw output
):
3ee11508-b7d0-4116-aed4-8c4abe399fd4, 2022-06-07T05:58:07 UTC, 506f370e6a184b38ae4ad9988e396384
3ee11508-b7d0-4116-aed4-8c4abe399fd7, 2022-06-07T05:58:07 UTC, 506f370e6a184b38ae4ad9988e396384
(最后一个过滤器缺少一个键,因此我为示例选择了另一个键)
在线演示