snack - JsonPath 标准兼容与选择
snack-jsonpath 同时兼容 jayway.jsonpath 和 IETF JSONPath (RFC 9535) 标准 (两者不兼容)
jayway.jsonpath算是事实标准(2011 年首发,大量的项目有用)IETF JSONPath (RFC 9535)为协议标准(2024 年通过)
snack-jsonpath 默认采用 IETF JSONPath (RFC 9535) 标准策略。jayway.jsonpath 则通过选项开启:
Options options = Options.of().addFeatures(Feature.JsonPath_JaywayMode);
ONode.ofJson(json, options).select("$.a[?@.b == 'kilo']");
//或者
ONode.ofJson(json, Feature.JsonPath_JaywayMode).select("$.a[?@.b == 'kilo']");
对比列表:
IETF JSONPath (RFC 9535) | jayway.jsonpath | |
|---|---|---|
| 侧重查询 | 带了部分计算 | |
[?] | 过滤 array:子项;object:值项;value:自己 | 过滤 array:后代;object,value:自己 |
.. | 联合为选择器,如:..name,..*,..[?] | 独立就是个选择器 |
$..[?@.b.c == 1] | 对应 $..b[?(@.c == 1)] | |
..[?] | 过滤 自己和后代 | 过滤 后代 |
[?fun()] | 过滤函数(查询性质) | / |
.fun() | / | 聚合函数(有计算性质) |