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

如何通过Key筛选JSON并提取指定属性值?

用jq提取指定属性的值

问题场景

给定JSON数据:

[
    {
        "source": 
        {
            "file": "test",
            "baz": "now"
        }
    },
    {
        "source": {
            "dev": "foo"
        }
    },
    
    {
        "source": {
            "bar": "bar"
        }
    }
]

需要提取所有file或dev属性的值,预期结果是["test", "foo"]。但当前使用的jq语句只会返回完整对象:

.[].source | select(.file? or .dev?)

解决方法

直接在筛选后提取对应属性的值即可,推荐几种实用写法:

写法一(最直观)

[.[].source | select(.file? or .dev?) | .file // .dev]
  • 先通过select筛选出包含file或dev的对象
  • 用//(空值替代运算符)优先取file的值,对象里没有file就取dev的值
  • 外层的[]把所有结果打包成数组,正好符合预期输出

写法二(灵活适配多属性)

如果后续要调整目标属性,这种写法更易修改:

[.[].source | select(.file? or .dev?) | .[keys[] | select(. == "file" or . == "dev")]]
  • 先筛选出目标对象,再筛选出file或dev的属性名,最后提取对应的值
  • 同样用外层[]包裹成数组

写法三(简洁版)

如果能确定每个符合条件的对象只会有file或dev其中一个,还可以这么写:

[.[].source[] | select(keys[] | IN("file", "dev"))]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 07:30:10