当前位置: 首页 > news >正文

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.jsonpath 和 IETF 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)]
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可以是负数(从末尾开始计算) 依赖于数组元素类型
http://www.jsqmd.com/news/20446/

相关文章:

  • SMARTFORMS去掉数值后面的小数点
  • 089_尚硅谷_switch的课堂练习
  • SQL SERVER死锁查询,死锁分析,解锁,查询占用
  • 自定义组件中监听properties里面的属性的方法里面去取另外的properties里面的属性拿不到值的问题
  • 数字征程,逐级而上;生态协同,智绘新篇—— 艾拓琪威灏 与 哲讯顺维 数字化战略合作签署暨CRMMES项目启动会隆重举行
  • 嵌入式主板全景解析:从选型到趋势,读懂工业智能的核心载体
  • 2025 年唐山油漆生产厂家最新推荐榜单:精选优质企业,解析专业品牌选购指南唐山油漆批发/唐山油漆生产公司推荐
  • 做题笔记21
  • 权威调研榜单:重庆旧房加层改造公司TOP3榜单好评深度解析
  • 2025 年小饭桌加盟品牌最新推荐排行榜:多元服务与深厚底蕴品牌小饭桌加盟连锁/小饭桌加盟连锁/小饭桌少儿托管加盟机构推荐
  • 2025 年 MVR 蒸发器源头厂家最新推荐排行榜:聚焦食品医药化工环保领域优质设备,助力企业精准选型
  • DolphinScheduler依赖机制、Open-Falcon告警推送与监控的优化实践
  • Tailwind CSS 使用入门
  • 2025 年托管班加盟品牌最新推荐排行榜:聚焦国内优质机构,为投资者精选靠谱加盟项目托管班机构加盟/儿童托管班中心加盟/课后托管班加盟/小学托管班加盟连锁推荐
  • vscode创建快捷代码块,同时配置vue2和vue3的快捷代码块
  • 实用指南:Calico 网络插件在 K8s 集群的作用
  • 终于能打出生僻字了!麒麟系统搜狗输入法完整安装指南 - 实践
  • docker 离线下载安装部署
  • PaperReading:《Manipulating Multimodal Agents via Cross-Modal Prompt Injection》 - 详解
  • centos7 安装mysql5.7
  • 新手使用rocky10 过程中遇到问题:忘记root密码
  • godot + Avalonia 渲染第三方UI
  • 国标GB28181算法算力平台EasyGBS的云边协同的算力调度模式关键技术解析
  • 2025-10-23 cocos安装
  • 监控系统搭建集成实例
  • WPF 和 Avalonia 开发者的 html css 前端指南 ScrollViewer 篇
  • 陈旧性瘢痕药物
  • 用EasyPlayer播国标GB28181算法算力平台EasyGBS视频流,居然比点外卖还简单
  • verilog - 指南
  • 2025 年氙灯老化 / 紫外老化 / 冷热冲击 / 恒温恒湿 / 高低温 / 快速温变试验箱厂家推荐:柳沁仪器,多行业检测设备的优质供应伙伴