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

使用map_values选择含空格字符串未达预期,求正确jq语法

问题:提取JSON中指定login对应的password值

给定如下JSON数据集:

{
  "data": {
    "system": [
      {
        "login": "vault keystore password",
        "password": "123456"
      },
      {
        "login": "vault keystore masked",
        "password": "MASK-789101112"
      },
      {
        "login": "vault salt",
        "password": "toto"
      },
      {
        "login": "vault iteration",
        "password": "10"
      },
      {
        "login": "keystore Alias",
        "password": "vault"
      }
    ]
  }
}

需要提取login为"vault keystore password"对应的password值,预期结果为"123456"。此前使用jq表达式.data.system |map_values(select(.login == "vault keystore password"))[].password返回了多余结果,以下是正确的语法:

正确写法1:直接遍历筛选

jq '.data.system[] | select(.login == "vault keystore password") | .password' your-file.json
  • 说明:.data.system[]遍历数组内的每个对象,select筛选出符合条件的条目,最后提取.password字段,只会返回匹配的目标值。

正确写法2:确保只取第一个匹配项(适用于存在重复login的场景)

jq 'first(.data.system[] | select(.login == "vault keystore password") | .password)' your-file.json

原表达式问题分析

map_values是用于处理键值对象的转换工具,而.data.system是数组,使用它会保留数组的所有索引位置,不符合条件的元素会被转为null,最终遍历数组时会包含这些无效值,导致返回多余结果。直接遍历数组元素再筛选则不会出现这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 23:32:39