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

如何在Bash中用jq匹配username提取password_clear值

用jq按指定username提取对应password_clear的正确命令

原始JSON数据

{"id": "jboss_data1","DS1": {"policy_name": "CAT_LOCATION","username": "PRODUCTION_1","password_clear": "7bla1234"},"DS3": {"policy_name": "CAT_SRC","username": "PRODUCTION_2","password_clear": "foo7864"},"DS4": {"policy_name": "CAT_FOLDER","username": "PRODUCTION_3","password_clear": "123bar456"}}

问题分析

你之前的命令存在三个关键错误:

  1. 错误使用.value.username:原始JSON中DS1/DS3/DS4直接是包含username的对象,没有value层级
  2. 错误引用变量:把$user放在双引号里会被当作字符串字面量,而非传递的Bash变量
  3. 未过滤非对象节点:.[]会遍历所有顶级键,其中id是字符串,会导致无效遍历报错

正确命令

推荐两种可靠写法:

写法一:遍历顶级对象并筛选

直接过滤掉非对象的顶级节点(比如id),再匹配username:

jq -r --arg user "${user_picked}" '.[] | select(type == "object" and .username == $user) | .password_clear' file.json

写法二:用to_entries遍历键值对

将顶级键值对转换为结构化条目,更清晰地定位目标对象:

jq -r --arg user "${user_picked}" 'to_entries[] | select(.value.username == $user) | .value.password_clear' file.json

命令说明

  • --arg user "${user_picked}":将Bash环境变量user_picked传递给jq,在jq内部用$user引用
  • select(...):精准筛选出username匹配变量值的对象
  • -r:输出原始字符串格式的密码,避免额外引号
  • to_entries[]:把JSON的键值对转为{"key": "DS1", "value": {...}}格式,方便明确访问对象内容

示例

若user_picked="PRODUCTION_2",运行命令后会输出:

foo7864

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 11:37:24