snack4-jsonpath v4.0.2 发布

基于jdk8。支持:Json Dom 的构建、编码解转换、获取、JsonPath 查询、JsonSchema 验证。

<dependency>
  <groupId>org.noear</groupId>
  <artifactId>snack4-jsonpath</artifactId>
  <version>4.0.2</version>
</dependency>

Snack-Jsonpath 借鉴了 Javascript 所有变量由 var 申明,及 Xml dom 一切都是 Node 的设计。其下一切数据都以ONode表示,ONode也即 One node 之意,代表任何类型,也可以转换为任何类型。

  • 强调文档树的构建和操控能力
  • 高性能Json path查询(比 jayway.jsonpath 快很多倍)。同时兼容 jayway.jsonpathIETF JSONPath (RFC 9535) 标准 (用 options 切换)。为下一个十年提供强劲的 JsonPath 体验。
  • 支持 Json schema 架构校验
  • 支持 json5 部分特性(无键字段,注释,等…)
  • 优先使用 无参构造函数 + 字段 编解码(可减少注入而触发动作的风险)

依赖包清单:

依赖包描述
org.noear:snack4提供 json dom 构建和编解码支持
org.noear:snack4-jsonpath提供 json path 查询支持
org.noear:snack4-jsonschema提供 json schema 校验支持

开源项目仓库地址:

  • https://gitee.com/noear/snack-jsonpath
  • https://github.com/noear/snack-jsonpath

文档资料:

  • https://solon.noear.org/article/snack

1、版本更新说明

  • 添加 ONodeCreator 静态方法的支持(普通类)
  • 添加 ONodeAttr:ignore 注解属性支持
  • 添加 Write_BooleanAsNumber 新特性
  • 添加 Read_UseBigDecimalMode 新特性
  • 添加 Read_UseBigIntegerMode 新特性
  • 添加 Write_BigDecimalAsPlain 特性
  • 添加 DecodeContext:hasFeature, EncodeContext:hasFeature 新特性
  • 调整 ONode:nodeType,getType 合并为 type()options() 保持相同风格
  • 调整 QueryContext:isInFilter 更名为 isFiltered()
  • 调整 Write_BigNumbersAsString 更名为 Write_DoubleAsString
  • 优化 Write_Nulls 完善对 Map 输出的控制
  • 优化 Write_BrowserCompatible 写入性能
  • 优化 与 snack3 的效果兼容性

2、JSONPath 语法参考

语法元素描述
$根节点标识符
@当前节点标识符(仅在过滤选择器中有效)
[<selectors>]子段:选择节点的零个或多个子节点
.name简写 ['name']
.*简写 [*]
..[<selectors>]后代段:选择节点的零个或多个后代
..name简写 ..['name']
..*简写 ..[*]
'name'名称选择器:选择对象的命名子对象
*通配符选择器:选择节点的所有子节点
3索引选择器:选择数组的索引子项(从 0 开始)
0:100:5数组切片选择器:数组的 start:end:step
?<logical-expr>过滤选择器:使用逻辑表达式选择特定的子项
fun(@.foo)过滤函数:在过滤表达式中调用函数(IETF 标准)
.fun()聚合函数:作为片段使用(jayway 风格)

过滤选择器语法参考:

语法描述优先级
(...)分组5
name(...)函数扩展5
!逻辑 4
==,!=,<,<=,>,>=关系比较符3
&&逻辑 2
||逻辑 1

IETF JSONPath (RFC 9535) 标准定义操作符(支持)

操作符描述示例
==左等于右(注意1不等于’1’)$[?(@.a == 1)]
!=左不等于右$[?(@.a != 1)]
<左比右小$[?(@.a < 1)]
<=左小于或等于右$[?(@.a <= 1)]
>左大于右$[?(@.a > 1)]
>=左大于等于右$[?(@.a >= 1)]

jayway.jsonpath 增量操作符(支持)

操作符描述示例
=~左匹配正则表达式[?(@.s =~ /foo.*?/i)]
in左存在于右[?(@.s in ['S', 'M'])]
nin左不存在于右
subsetof左是右的子集[?(@.s subsetof ['S', 'M', 'L'])]
anyof左与右有一个交点[?(@.s anyof ['M', 'L'])]
noneof左与右没有交集[?(@.s noneof ['M', 'L'])]
size左(数组或字符串)的大小应该与右匹配$[?(@.s size @.expected_size)]
emptyLeft(数组或字符串)应该为空$[?(@.s empty false)]

IETF JSONPath (RFC 9535) 标准定义函数(支持)

函数描述参数类型结果类型
length(x)字符串、数组或对象的长度数值
count(x)节点列表的大小节点列表数值
match(x,y)正则表达式完全匹配值,值逻辑值
search(x,y)正则表达式子字符串匹配值,值逻辑值
value(x)节点列表中单个节点的值节点列表

jayway.jsonpath 函数(支持)

函数描述输出类型
length()字符串、数组或对象的长度Integer
min()查找当前数值数组中的最小值Double
max()查找当前数值数组中的最大值Double
avg()计算当前数值数组中的平均值Double
stddev()计算当前数值数组中的标准差Double
sum()计算当前数值数组中的总和Double
keys()计算当前对象的属性键集合Set<E>
concat(X)将一个项或集合和当前数组连接成一个新数组like input
append(X)将一个项或集合 追加到当前路径的输出数组中like input
first()返回当前数组的第一个元素依赖于数组元素类型
last()返回当前数组的最后一个元素依赖于数组元素类型
index(X)返回当前数组中索引为X的元素。X可以是负数(从末尾开始计算)依赖于数组元素类型
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值