You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用bash/jq根据子list属性值筛选JSON根列表元素

jq 基于子对象数组属性筛选根列表元素的实现

给定测试JSON数据如下:

[
    {
        "prop1": "prop11",
        "prop2": "prop21",
        "list": ["element1", "element2", "element3"]
    },
    {
        "prop1": "prop12",
        "prop2": "prop22",
        "list": ["element1", "element3"]
    },
    {
        "prop1": "prop13",
        "prop2": "prop23",
        "list": ["element2", "element3"]
    }
]

要筛选list属性包含指定值(示例中为element1)的根元素,核心是通过select过滤器匹配符合条件的数组项,根据需要的输出格式选择对应命令即可:

  • 输出带外层数组的格式化结果:使用方括号将筛选结果重新包裹为数组,命令如下:
jq '[.[] | select(.list | index("element1"))]' input.json

执行后返回格式化的数组结构,和示例预期完全一致:

[
  {
    "prop1": "prop11",
    "prop2": "prop21",
    "list": [
      "element1",
      "element2",
      "element3"
    ]
  },
  {
    "prop1": "prop12",
    "prop2": "prop22",
    "list": [
      "element1",
      "element3"
    ]
  }
]

兼容说明:如果使用的jq版本较低不支持数组直接调用index,可以把判断条件替换为.list | any(. == "element1");jq 1.6及以上版本还可以用可读性更高的写法select("element1" IN .list),效果完全相同。

  • 输出逐行单个对象的NDJSON格式:去掉外层包裹结果的方括号,加上-c参数启用紧凑输出(避免格式化换行),命令如下:
jq -c '.[] | select(.list | index("element1"))' input.json

执行后每个符合条件的对象单独占一行输出,无多余格式:

{"prop1":"prop11","prop2":"prop21","list":["element1","element2","element3"]}
{"prop1":"prop12","prop2":"prop22","list":["element1","element3"]}

如果需要匹配其他目标值,直接替换命令中"element1"为对应内容即可,数字、布尔类型的匹配值不需要加引号。

内容的提问来源于stack exchange,提问作者patodomau

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 20:57:28