首页 > 解决方案 > 如何使用键和值输出正确的结果?

问题描述

我有一个如下的json:

[
    {
      "AvailabilityZone": "ap-northeast-1a",
      "Tags": [
        {
          "Value": "value1",
          "Key": "key1"
        },
        {
          "Value": "value2",
          "Key": "key2"
        }
      ],
    },
    {
          "AvailabilityZone": "ap-northeast-1a",
          "Tags": [
            {
              "Value": "value3",
              "Key": "key3"
            },
            {
              "Value": "value4",
              "Key": "key4"
            }
          ],
        },
]

当我从键盘输入键和值时。我只想通过 jq 选项使用键和值输出正确的结果。

示例:我输入的 Key:value 是 key3:value3。我的愿望:

{
      "AvailabilityZone": "ap-northeast-1a",
      "Tags": [
        {
          "Value": "value3",
          "Key": "key3"
        },
        {
          "Value": "value4",
          "Key": "key4"
        }
      ],
}

标签: jsonbashjq

解决方案


使用 select 过滤标签下的数组:

jq '.[].Tags | select((.[].Key == "key3") and (.[].Value="value3"))  ' < file.json

连同从标准输入中读取键和值:

echo key3 value3 | (
    read key value
    k=$key v=$value jq ".[].Tags
        | select((.[].Key == env.k) and (.[].Value=env.v))
    " < file.json)

推荐阅读