通过另一个字段的值提取一个字段

问题描述 投票:0回答:1

我有具有该结构的 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.

所以我不明白如何通过值名称查找字段。

json bash jq
1个回答
0
投票

select
到代码,通过传递它的输出执行您想要的操作。

jq --arg time '2023-11-29T08:46:30.202778Z' '
  .[].data.payload[] | select(.createdAt == $time) | .message
'
© www.soinside.com 2019 - 2024. All rights reserved.