如何编写JSONPath表达式获取含指定键的所有JSON对象(含根对象)
解决JSONPath匹配含指定键的根对象及所有子对象问题
你之前用的$..*[?(@.key1)]取不到根对象,是因为$..*只会遍历根节点的所有后代节点,不包含根节点本身。要同时匹配根节点和所有含指定键的子对象,你可以用逗号分隔两个表达式,把根节点的检查和后代节点的查询合并:
$[?(@.key1)],$..*[?(@.key1)]
原理说明
$[?(@.key1)]:单独检查根对象是否包含key1,如果包含就返回根对象$..*[?(@.key1)]:遍历所有后代节点,筛选出包含key1的对象- 逗号在多数JSONPath实现里表示合并多个表达式的结果,这样就能同时拿到根对象和符合条件的子对象
示例验证
假设你的JSON结构是:
{ "key1": "root content", "key3": { "key1": "key3 content" }, "key5": { "key1": "key5 content" }, "key2": { "key6": "no key1 here" } }
用上述表达式会返回三个对象:根对象、key3对应的子对象、key5对应的子对象,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Nicolas Sitbon
相关产品推荐
相关产品推荐

