使用jq根据字段从对象列表中过滤出一个对象

朱迪

我们有以下json文件,其中包括分区和分区id)

在文件中,我们有6个分区,而所有分区上的主题名称均相同

more file.json

{
  "version": 1,
  "partitions": [
    {
      "topic": "list_of_cars",
      "partition": 2,
      "replicas": [
        1003,
        1004,
        1005
      ],
      "log_dirs": [
        "any",
        "any",
        "any"
      ]
    },
    {
      "topic": "list_of_cars",
      "partition": 4,
      "replicas": [
        1005,
        1006,
        1001
      ],
      "log_dirs": [
        "any",
        "any",
        "any"
      ]
    },
    {
      "topic": "list_of_cars",
      "partition": 0,
      "replicas": [
        1001,
        1002,
        1003
      ],
      "log_dirs": [
        "any",
        "any",
        "any"
      ]
    },
    {
      "topic": "list_of_cars",
      "partition": 1,
      "replicas": [
        1002,
        1003,
        1004
      ],
      "log_dirs": [
        "any",
        "any",
        "any"
      ]
    },
    {
      "topic": "list_of_cars",
      "partition": 5,
      "replicas": [
        1006,
        1001,
        1002
      ],
      "log_dirs": [
        "any",
        "any",
        "any"
      ]
    },
    {
      "topic": "list_of_cars",
      "partition": 3,
      "replicas": [
        1004,
        1005,
        1006
      ],
      "log_dirs": [
        "any",
        "any",
        "any"
      ]
    }
  ]
}

是否可以根据分区ID打印以下内容

例如

假设我们要为分区ID打印json部分– 4

那么预期结果应该是这样的

{
           "topic": "list_of_cars",
           "partition": 4,
           "replicas": [
                          1005,
                          1006,
                          1001
           ],
           "log_dirs": [
                          "any",
                          "any",
                          "any"
           ]
}

最好的情况是打印以下有效格式(如果可能)

{
    "version": 1,
    "partitions": [{
        "topic": "list_of_cars",
        "partition": 4,
        "replicas": [
            1005,
            1006,
            1001
        ],
        "log_dirs": [
            "any",
            "any",
            "any"
        ]
    }]
}
伊尼安

这是一项简单的过滤工作,jq可以从对象列表中选择所需的对象。

jq --arg part_id "4" '.partitions[] | select(.partition == ($part_id|tonumber))'

或使用map()功能

您可以输入所需的分区ID作为输入,然后在select(..)表达式中使用它由于默认情况下args被评估为字符串,并且过滤器需要检查整数值,因此我们使用进行了字符串到输入的转换tonumber,因此将.partititions与整数值进行比较。

要回答后续问题以仅保留所需的对象并删除其他对象,请使用|=运算符并选择

jq --arg part_id "4" '.partitions |= map(select(.partition == ($part_id|tonumber)))'

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

根据另一个列表中对象的字段值从列表中删除元素-JAVA

根据javascript中的另一个对象数组过滤对象数组

使用linq根据另一个列表的属性从列表中删除对象

对嵌套对象中的字段进行JQ过滤

使用jq更新JSON对象列表中的一个值(与已知密钥匹配)

过滤对象数组,其中对象中的一个字段为数组

角度-根据另一个对象数组中的值过滤对象数组

Python使用另一个列表中的元素过滤出一个列表

过滤出对象数组中的对象

从JavaScript中的对象列表中过滤出总和最少的数组

根据对象中的一个属性从列表中获取最新的对象

从组合列表C#中过滤出对象

根据一个或多个条件从列表中搜索对象

根据另一个值数组过滤对象数组,返回一个空列表

根据属性从列表中返回一个随机对象

使用 Java 8 中的另一个列表过滤对象列表

根据另一个对象数组中的条件过滤对象数组

根据一个值用jq从列表中选择对象,访问顶级对象

根据javascript中的另一个对象数组过滤对象数组

如何从对象列表中过滤出一个对象?

根据属性值过滤 JSON 对象列表,属性值在另一个 JSON 对象列表中

在jq中过滤数组后如何获取第一个对象?

如何使用 LINQ 语句过滤出与另一个列表中的一个单词匹配的项目?

根据一个字段的列表从对象列表中选择一些对象

如何过滤与另一个对象列表中的某些条件不匹配的对象列表

从对象数组中过滤出对象数组

如何根据另一个对象中给出的规范过滤一个对象?

在 MongoDB 中,有一个对象列表,通过查询同一对象的另一个字段的值,根据对象的一个字段的值对所有文档进行排序

Powershell 从另一个列表中过滤出一个列表