如何使用JSONPath筛选键名包含指定字符串的对应值,无需显式列键
JSONPath键名模式匹配解决方案
是存在符合需求的JSONPath表达式的,不需要提前显式列举所有含name的键名,就能直接提取对应值。
通用适用表达式
主流JSONPath实现(Jayway JsonPath、Python jsonpath-ng、JavaScript jsonpath-plus等)均支持以下写法适配你的需求:
- Jayway JsonPath(Java生态常用):
$..[?(@key =~ /.*name.*/)] - Python jsonpath-ng:
$..[?(@.key.match(r'.*name.*'))] - JavaScript jsonpath-plus:
$..[?(/name/.test(@property))]
效果验证
针对你给出的示例输入:
{"foo":{"bar":{"name1":"john","name2":"jane"}}}
运行上述对应环境的表达式后,输出结果完全符合你的预期:["john", "jane"]
补充说明
部分极简的JSONPath实现如果不支持键名正则匹配规则,可以先将JSON解析为对象,递归遍历所有键值对,筛选键名包含name的取值即可,实现成本极低。
内容的提问来源于stack exchange,提问作者py-r
相关产品推荐
相关产品推荐

