【问题标题】:jq and bash : get a specific value in json when other key value pair matchesjq 和 bash :当其他键值对匹配时,获取 json 中的特定值
【发布时间】:2020-06-05 17:07:40
【问题描述】:

我想解析一个 JSON 文件以获取条件是另一个键/值对的特定值,但我不知道如何处理(我不是开发人员)。例如,我得到这个 JSON

[
    {
        "id": "c490ffaf-92ea-4a29-9614-ab36a088f366",
        "clientId": "account",
        "name": "${client_account}",
        "rootUrl": "${authBaseUrl}",
        "baseUrl": "/realms/test1/account/",
        "surrogateAuthRequired": false,
        "enabled": true,
        "clientAuthenticatorType": "client-secret",
    },
    {
        "id": "2daa32334-24322-4a29-43242-423223",
        "clientId": "swap",
        "name": "${client_swap}",
        "rootUrl": "${authBaseUrl}",
        "baseUrl": "/realms/test/swap/",
        "surrogateAuthRequired": false,
        "enabled": true,
        "clientAuthenticatorType": "client-secret",
    },
    {
        "id": "e22112-11111-4a329-22211-333312",
        "clientId": "broker",
        "name": "${client_broker}",
        "rootUrl": "${authBaseUrl}",
        "baseUrl": "/realms/test/broker/",
        "surrogateAuthRequired": false,
        "enabled": true,
        "clientAuthenticatorType": "client-secret",
    },
]

我想从“clientId”的值为“account”的块中获取“id”的值(在此示例中为 c490ffaf-92ea-4a29-9614-ab36a088f366)

如何用 jq 和 bash 做那种事情?

【问题讨论】:

  • 您可以使用jq -r 'map(select(.clientId == "account") | .id)[0]' (try it here)。如果您还有其他问题,请查看 jq 的 manualtutorial 并尝试在询问您是否遇到问题之前提出自己的解决方案,StackOverflow 上不太接受要求代码但不付出努力的问题。

标签: json bash jq


【解决方案1】:

如果出现不止一次,最好使用以下查询:

.[]
| select(.clientId == "account")
| .id

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-12
    • 1970-01-01
    • 1970-01-01
    • 2019-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多