使用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
相关产品推荐
相关产品推荐

