🔥 snack4-jsonpath v4.0.2 发布
提供 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.jsonpath和 IETF JSONPath (RFC 9535) 标准 (用options切换)。为下一个十年提供强劲的 JsonPath 体验。 - 支持
Json schema架构校验 - 支持
json5部分特性(无键字段,注释,等...) - 优先使用 无参构造函数 + 字段 编解码(可减少注入而触发动作的风险)
- 支持 java8 到 java25
依赖包清单:
| 依赖包 | 描述 |
|---|---|
org.noear:snack4 |
提供 json dom 构建和编解码支持 |
org.noear:snack4-jsonpath |
提供 json path 查询支持 |
org.noear:snack4-jsonschema |
提供 json schema 校验支持 |
开源项目仓库地址:
文档资料:
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💯5 |
数组切片选择器:数组的 start🔚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)] |
empty |
Left(数组或字符串)应该为空 | $[?(@.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可以是负数(从末尾开始计算) | 依赖于数组元素类型 |
关注公众号
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
IntelliJ IDEA 2025.2.4 发布
IntelliJ IDEA 2025.2.4 已发布,其中包含多项有价值的修复。 最新更新带来以下改进: 卸载程序现在可以按预期工作,并且在卸载修补版本时不再失败并报告错误。[IJPL-35268] IDE 在代码补全期间不再 freezes,之前由于递归调用StubIndex导致死锁而出现此问题。[IJPL-2989] 使用 HTTP 客户端中的 cURL 命令转换功能在使用-b或--cookieoptions时不再失败。[IJPL-177565] 现在,IDE 在搁置和取消搁置更改时会保留原始 line endings,而不是在 CRLF 和 LF 格式之间进行转换。[IJPL-208047] 背景图像现在可以在所有工具窗口中正确显示。[IJPL-208221] Maven 控制台输出的中文现在可以正确显示。[IDEA-376955] 在 AI diff view 中,带有间距的中间部分已调整大小,以提高可用性。[IJPL-195411] IDE 现可正确在依赖模块构建完成后再构建其依赖模块。[IDEA-377309] 有关修复的完整概述,可参阅发行说明。
-
下一篇
Layui 2.13.0 发布,1024 节日快乐 🎉🎉🎉
这可能是 Layui 2.x 系列版本最后一个相对较大的重构与变更,突然有些感慨。晨星 @Sight-wcg 在一年前和我私信的一句话「参与项目贡献,一方面是情怀,希望 2.x 最后的版本能少一些遗憾…」,让我们用了长达一年多的时间去为 Layui 2 填补那些「遗憾」,可能仍有许多的不完美,仍有大量可改善的空间,但真的已经变得好多了,也差不多该到了收官的节点了。 Layui 通过 2.13.0 致敬过去那「个中滋味」的 10 年,作为初始创作者,我所感受的价值早已不是 Layui 在互联网留下的足迹,而是 Layui 已经从个人驱动的项目走向了社区驱动,有着更多纯粹的开发者接续初心与热爱,共同维持一种温度、一种希望、一种她存在的合理性… 今天又是一年的 1024 🎉,有时候真的只有程序员才能真正懂得程序员,愿 Layui 的那一束光照亮彼此,也照亮她新的节点。 更新日志 component 重构 carousel 组件#2857 重构 colorpicker 组件#2858 重构 flow 组件#2860 重构 transfer 组件#2862 重构 tree 组件#2863 重构...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2全家桶,快速入门学习开发网站教程

微信收款码
支付宝收款码