snack4-jsonpath v4.0.36支持IETF RFC 9535标准,发布了吗?

摘要:高性能Json path查询(比 jayway.jsonpath 快很多倍)。同时兼容 jayway.jsonpath 和 IETF JSONPath (RFC 9535) 标准 (用 options 切换)。为下一个十年提供强劲的 Jso
提供 Json Dom 的构建、编码解转换(序列化)、获取、JsonPath 查询、JsonSchema 验证等功能。 <dependency> <groupId>org.noear</groupId> <artifactId>snack4-jsonpath</artifactId> <version>4.0.36</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 校验支持 开源项目仓库地址: https://gitee.com/noear/snackjson https://github.com/noear/snackjson 文档资料: https://solon.noear.org/article/snack 1、最近更新 添加 snack4 Json Feature.Read_TrimString 特性 添加 snack4 JsonReader.iterableNext 方法(支持 json 流式读取,特别适配 llm stream 输出) 添加 snack4 JsonReader.readLast 方法 添加 snack4 ONode 字段类型反序列化支持 添加 snack4 自定义注解获取支持 添加 snack4 Options.then 方法,用于链式构建 添加 snack4 CodecLib.patternCreators,patternDecoders,patternEncoders 去重处理 添加 snack4 MapperLib.schemaPatternMappers,typePatternMappers 去重处理 添加 snack4 AtomicBoolean,AtomicLong,AtomicInteger 支持 添加 snack4 Optional 内置编解码器支持(也可以自定义扩展) 添加 snack4 ONode:delete 方法,协助 jsonpath 删除 添加 snack4-jsonschema JsonSchema 默认值生成 添加 snack4-jsonschema 类型映射机制,支持 Future,Optional 等包装或传递类型 优化 snack4 Iterable 支持(替代之前的 Collection) 优化 snack4 反序列化自动移除 '@type' 属性申明 优化 snack4-jsonpath 逻辑表达式兼容性支持无空隔的 "a=='a'" 优化 snack4-jsonschema Optional 类型处理 调整 snack4 JsonReader.streamRead 更名为 readNext(前者标为弃用) 调整 snack4-jsonpath JsonPath.delete 改为返回 bool(之前为 void) 修复 snack4 ONode.ofBean 和 ofJson 传入 null 会异常的问题 修复 snack4 Json BeanDecoder array.item 为 null 不能原还的问题(补过滤了) 修复 snack4-jsonschema JsonSchema TypeRule.getSchemaTypeName 没有把初始节点识别为 null 的问题(识别为 undefined 了) 修复 snack4-jsonpath JsonPathProvider:delete(root, path) 删除多个 arrray index 时会超界的问题 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可以是负数(从末尾开始计算) 依赖于数组元素类型