我有具有该结构的 JSON 文件:
[
{
"id": "6a6176c1-b879-8f66-6ccb-2532ec151589",
"name": "Name",
"data": {
"payload": [
{
"initiator": "Manager",
"action": "update",
"userId": "user",
"createdAt": "2023-11-29T08:46:30.202778Z",
"message": "<bulky message 1>"
},
{
"initiator": "clusterManager",
"action": "update",
"userId": "user",
"createdAt": "2023-11-29T08:46:30.202778Z",
"message": "<bulky message 2>"
}
]
}
}
]
我使用
jq
命令来解析该 JSON。
我可以获得 createdAt
字段并将其放入数组中。
CHANGELOG_DATES=($(jq '.[].data.payload[].createdAt' /tmp/changelog.json))
echo ${CHANGELOG_DATES[@]}
"2023-11-29T08:46:30.202778Z" "2023-11-29T08:46:30.202778Z"
但我无法想象如何通过
message
字段选择 createdAt
字段。如果我选择 "2023-11-29T08:46:30.202778Z"
我会得到 <bulky message 1>
。
但是如果尝试使用地图我会收到错误
jq '.[].data.payload[].map(select(.type == "2023-11-29T08:46:30.202778Z")' /tmp/changelog.json
.[].data.payload[].map(select(.type == "2023-11-29T08:46:30.202778Z"): Unknown host
ifconfig: `--help' gives usage information.
所以我不明白如何通过值名称查找字段。
从
select
到代码,通过传递它的输出执行您想要的操作。
jq --arg time '2023-11-29T08:46:30.202778Z' '
.[].data.payload[] | select(.createdAt == $time) | .message
'