如何使用带逻辑OR条件的JSONPath获取目标字段的对应值
如何使用带逻辑OR条件的JSONPath获取目标字段的对应值
我懂你的痛点!你已经离目标很近了,就是差最后一步把值单独拎出来对吧?不同的JSONPath实现(比如Jayway JsonPath、Goessner的原始语法、JsonPath-Plus这些)细节上会有点差异,我给你几个能直接拿到目标值的实用方案:
方案1:利用短路逻辑直接取值(推荐)
很多现代JSONPath实现支持||的短路求值,这个写法最简洁,直接优先取meter的值,不存在就自动取crew的值:
$.meter || $.crew
针对你的第一个JSON会返回"A123",第二个就返回"XMS-858",完全是你要的纯值。
方案2:基于你之前的写法优化
你之前用$.['meter', 'crew']拿到了键值对,那只要再加个.*就能提取所有值,再用[0]取第一个有效结果就行:
$.['meter', 'crew'].*[0]
这个写法兼容性不错,大部分JSONPath工具都支持。比如针对你的第二个JSON,$.['meter', 'crew']返回{"crew": "XMS-858"},加上.*就变成["XMS-858"],最后[0]就拿到纯字符串值了。
方案3:结合过滤表达式直接取值
如果你的JSONPath支持过滤后链式取值,也可以这么写:
$.[?(@.meter)].meter || $.[?(@.crew)].crew
逻辑是先过滤出存在meter的对象,然后取它的meter值;如果没有,就过滤出存在crew的对象再取crew值。
你可以根据自己正在使用的JSONPath工具来选最适配的写法,我自己平时用方案1最多,简洁又直接。
备注:内容来源于stack exchange,提问作者kvtral
相关产品推荐
相关产品推荐

