snack4-jsonpath v4.0.2 发布

news/2025/10/23 16:28:13/文章来源:https://www.cnblogs.com/noear/p/19160988

基于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.mzph.cn/news/944417.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SMARTFORMS去掉数值后面的小数点

DATA: lv_value TYPE string VALUE 12.012.CONDENSE lv_value NO-GAPS. SHIFT lv_value RIGHT DELETING TRAILING 0. SHIFT lv_value RIGHT DELETING TRAILING ..WRITE lv_value.

089_尚硅谷_switch的课堂练习

089_尚硅谷_switch的课堂练习1.练习1.使用switch 把小写类型的 char型转为大写,只转换a, b, c, d, e其它的输出 `other` 2.对学生成绩大于60分的,输出`合格`。低于60分的,输出`不合格`。(注: 输入的成绩不能大于10…

SQL SERVER死锁查询,死锁分析,解锁,查询占用

From: https://www.cnblogs.com/K-R-/p/18431639 简单点的处理方法: 1、查询死锁的表select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) tableName from sys.dm_tran_locks where resourc…

自定义组件中监听properties里面的属性的方法里面去取另外的properties里面的属性拿不到值的问题

自定义组件中监听properties里面的属性的方法里面去取另外的properties里面的属性拿不到值的问题1 properties这里有两个属性 options和modelValue,对modelValue进行监听父组件两个属性都传了值properties: {options:…

数字征程,逐级而上;生态协同,智绘新篇—— 艾拓琪威灏 与 哲讯顺维 数字化战略合作签署暨CRMMES项目启动会隆重举行

在时代的巨轮驶向数字经济的深水区,企业的进化不再是零敲碎打的工具升级,而是一场关乎全局、贯穿价值链的战略重塑。回首过往,每一步坚实的足迹都预示着今天的必然。从2022年智能会议室的初步尝试,到2023年OA协同办…

嵌入式主板全景解析:从选型到趋势,读懂工业智能的核心载体

在智能制造车间的机械臂控制系统中,在偏远地区的电力监控终端里,在医院的便携式监护仪内部,都藏着同一个核心硬件—— 嵌入式主板。作为连接硬件组件与软件系统的 "神经中枢",它不仅决定着设备的运行效率…

2025 年唐山油漆生产厂家最新推荐榜单:精选优质企业,解析专业品牌选购指南唐山油漆批发/唐山油漆生产公司推荐

引言 随着环保政策收紧与产业升级加速,唐山油漆市场呈现 “新旧品牌迭代、技术加速升级” 的态势,但同时也存在信息不对称、产品质量悬殊等问题 —— 部分企业仍沿用传统工艺,VOC 排放超标,而新兴品牌虽技术先进却…

做题笔记21

10.22 模拟赛 T1 考虑当区间足够大的时候,可能所有的数 T2 T3 T4

权威调研榜单:重庆旧房加层改造公司TOP3榜单好评深度解析

随着城市建筑用地的日益紧张和居民对居住空间扩展需求的增长,旧房加层改造已成为重庆建筑市场的重要组成部分。据重庆市建筑业协会数据显示,2024年重庆旧房改造市场规模突破80亿元,其中加层改造业务占比达18%,年均…

2025 年小饭桌加盟品牌最新推荐排行榜:多元服务与深厚底蕴品牌小饭桌加盟连锁/小饭桌加盟连锁/小饭桌少儿托管加盟机构推荐

引言 随着我国双职工家庭数量增多,少儿课后托管需求呈爆发式增长,小饭桌加盟行业成为创业热门领域。但当前市场乱象频发,部分品牌无证经营、安全管理缺失,服务仅停留在基础餐饮层面,难以满足家长对孩子课后学习、…

2025 年 MVR 蒸发器源头厂家最新推荐排行榜:聚焦食品医药化工环保领域优质设备,助力企业精准选型

引言 当前工业生产与环保治理对高效节能蒸发设备需求激增,MVR 蒸发器凭借显著优势,在食品、医药、化工、环保等领域应用广泛。但市场上 MVR 蒸发器源头厂家数量繁杂,产品质量、技术水平与服务能力参差不齐,不少企业…

DolphinScheduler依赖机制、Open-Falcon告警推送与监控的优化实践

本文聚焦某大数据团队的实战优化经验,系统阐述该团队的核心实践:针对任务依赖机制的源码级改造(新增节点级别判断逻辑)、与Open-Falcon的告警对接升级(实现信息精简、优先级分级与分群推送),以及组件监控体系的…

Tailwind CSS 使用入门

[!NOTE] Tailwind CSS 是一个别具一格的 CSS 界面框架。用官网的一句话来介绍:Rapidly build modern websites without ever leaving your HTML。也就是只要引入 Tailwind CSS,在不需要使用任何自定义 CSS 文件的情况…

2025 年托管班加盟品牌最新推荐排行榜:聚焦国内优质机构,为投资者精选靠谱加盟项目托管班机构加盟/儿童托管班中心加盟/课后托管班加盟/小学托管班加盟连锁推荐

引言 当前少儿课后托管需求持续攀升,托管班行业迎来发展热潮,但市场乱象也随之凸显。不少机构存在管理不规范、师资专业度不足、安全保障缺失等问题,难以满足家长对优质托管服务的需求。同时,市场上品牌数量繁杂,…

vscode创建快捷代码块,同时配置vue2和vue3的快捷代码块

文件——首选项——配置代码片段,弹出的搜索框内,输入 vue.json 之后在打开的vue.json中复制下面代码配置{// Place your snippets for vue here. Each snippet is defined under a snippet name and…

实用指南:Calico 网络插件在 K8s 集群的作用

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

终于能打出生僻字了!麒麟系统搜狗输入法完整安装指南 - 实践

终于能打出生僻字了!麒麟系统搜狗输入法完整安装指南 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Cons…

docker 离线下载安装部署

一、docker资源包下载地址1、访问 Docker 的官方下载页面:Index of linux/static/stable/x86_64/ 2、访问阿里云镜像下载页面:docker-ce-linux-static-stable-x86_64安装包下载_开源镜像站-阿里云 二、解压安装包在…

PaperReading:《Manipulating Multimodal Agents via Cross-Modal Prompt Injection》 - 详解

PaperReading:《Manipulating Multimodal Agents via Cross-Modal Prompt Injection》 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !imp…

新手使用rocky10 过程中遇到问题:忘记root密码

开篇情景:因主播手速过快,以root用户身份在家目录下使用了passwd,并且没有意识到已经在键盘上输入了一系列其他指令导致root密码出现问题。 解决方法1:重装操作系统,但会导致之前所有操作及保存文件等找不到。 解…