能否仅使用JSONPath从嵌套JSON中按顺序提取name与对应otherid属性
结论
仅靠通用标准JSONPath语法,无法直接输出你需要的指定顺序结果
为什么原生语法做不到
标准JSONPath本质是路径匹配查询语言,核心规则是「匹配所有符合路径规则的节点,按照JSON文档本身从上到下、从左到右的遍历顺序,统一汇总为一个数组返回」,本身不支持按父节点分组、自定义交错拼接输出顺序的能力:
- 查询
$[*].name会返回所有顶层对象的name值组成的数组:["noot", "doot"],所有name会被集中放在数组开头 - 查询
$[*].things[*].otherid会返回所有嵌套层级下匹配到的otherid值组成的数组:[11,22,33,111,222,333],所有otherid会被集中放在数组后部
两个查询的返回是完全独立的数组,根本无法形成你要的「noot输出后紧跟自身对应的3个otherid,再输出doot、紧跟doot对应的3个otherid」的逐行交错顺序。
可行的实现路径
- 部分自带扩展后处理能力的非标准JSONPath工具,因为额外加了结果排序、格式化的自定义功能,可能能直接跑出你要的输出效果,但这是工具本身的附加能力,不是JSONPath语法原生支持的特性,换到其他符合通用标准的解析器上就无法生效,不具备跨工具的通用性。
- 更稳妥的低门槛实现不需要复杂开发,只要用几行极简脚本搭配JSONPath的基础查询能力即可:
- 用JSONPath取出所有顶层根对象的集合
- 循环遍历每一个根对象,先输出对象的
name字段值 - 在当前循环内遍历对象下的
things数组,逐行输出每个元素的otherid值
整个逻辑总代码量不超过5行,比硬凑非标准JSONPath语法的兼容性强得多。
内容的提问来源于stack exchange,提问作者GPV
相关产品推荐
相关产品推荐

