如何使用jq获取包含特定字符串的JSON键?
嘿,这事儿我熟!用jq提取JSON里包含特定字符串的键其实很简单,我给你一步步讲清楚,结合你提供的JSON例子来演示~
用jq提取包含特定字符串的JSON键
1. 只提取匹配的键名
如果你只需要得到所有符合条件的键名,用这个命令就行:
jq 'paths | select(.[-1] | test("你的目标字符串")) | last' your_json_file.json
命令拆解:
paths:递归遍历整个JSON结构,返回每个节点的路径数组(比如["module","data","leftContainer_CL"])select(.[-1] | test("你的目标字符串")):筛选出路径最后一个元素(也就是键名)包含你指定字符串的项last:取出路径数组的最后一个元素,也就是我们要的键名
举个例子,假设你要找包含container的键,用你的JSON数据运行命令后,会输出:
"leftContainer_CL" "container_C"
2. 提取键名+对应的值
如果需要连键带值一起获取,用这个命令:
jq 'to_entries | recurse( .value | objects | to_entries ) | select(.key | test("你的目标字符串"))' your_json_file.json
命令拆解:
to_entries:把JSON对象转换成{"key": "键名", "value": "对应值"}的键值对数组recurse(...):递归处理所有嵌套的子对象,确保不会漏掉深层的键select(.key | test("你的目标字符串")):筛选出键名匹配的键值对
用你的JSON数据运行后,会输出包含匹配键的完整键值对(比如leftContainer_CL和container_C的详细内容)。
3. 从标准输入读取JSON
如果你的JSON是通过管道传递过来的(比如从其他命令输出),可以这样用:
cat your_json_file.json | jq 'paths | select(.[-1] | test("你的目标字符串")) | last'
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

