如何用单条JSONPath提取API返回的数组/对象混合结构中的key值?
兼容数组/单对象格式的JSONPath提取方案
第三方API返回的info字段存在两种格式:多元素时为对象数组,单元素时为单个对象,要统一提取所有key值,你之前尝试的联合表达式语法有误,以下是可行的解决方案:
精准解决方案(基于Jayway JsonPath实现)
利用JSONPath的$type操作符判断info的类型,结合联合表达式分别处理两种场景:
$.info[?($type(@) == 'array')][*].key, $.info[?($type(@) == 'object')].key
工作原理:
- 当
info是数组时,第一个表达式会遍历数组内所有对象的key字段 - 当
info是单个对象时,第二个表达式直接提取该对象的key值 - 联合表达式会自动合并有效结果,过滤无效匹配的空结果
简化方案(仅适用于无其他key字段干扰的场景)
如果可以确保JSON结构中只有info下存在key字段,直接使用递归下降表达式即可:
$..key
这个表达式会递归遍历整个JSON结构,提取所有名为key的字段值,无需区分info是数组还是对象。
为什么之前的表达式无效?
你写的$.[info[*].key,info.key]存在语法错误:
- 联合表达式的正确格式是将多个路径用逗号分隔,无需在
$后加. - 正确的基础联合表达式应为
$.info[*].key, $.info.key,但部分JSONPath实现不会自动过滤空结果(比如当info是数组时,$.info.key会返回空),因此需要结合类型判断来确保结果准确。
内容的提问来源于stack exchange,提问作者Andrei
相关产品推荐
相关产品推荐

