高性能 Jsonpath 框架,Snack3 3.2.90 发布

来源: 投稿
2024-03-31 12:40:00

Snack3,一个高性能的 JsonPath 框架

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

  • 强调文档树的操控和构建能力
  • 高性能Json path查询(顶级的兼容性和性能)
  • 顺带支持序列化、反序列化
  • 基于 无参构造函数 + 字段 操作实现(反序列化时不会有触发危险动作的风险)
<dependency>
  <groupId>org.noear</groupId>
  <artifactId>snack3</artifactId>
  <version>3.2.90</version>
</dependency>

本次累计更新:

  • 添加 特性 Feature.DisableClassNameRead
  • 添加 特性 DisableCollectionDefaults
  • 添加 ZonedDateTime 时间类型的处理
  • 添加 OffsetDateTime 时间类型的处理
  • 添加 时间解析格式 yyyy-MM-dd'T'HH🇲🇲ss+HH:mm
  • 优化 recordable 识别,避免构造函数可能索引超界的问题
  • 修复 $..[?(@.treePath)] 表达式的兼容问题
  • 修复 C{final data:Map} 反序列化时 data 无数据的问题
  • 修复 EnumWrap 构造时 getEnumConstants 可能为 null 的问题
  • 修复 request1.result[*].relTickers[0].tickerId 表达式兼容问题

简单演示:

ONode o = ONode.loadStr(json); //将json String 转为 ONode
ONode o = ONode.loadObj(user); //将java Object 转为 ONode

//不确定返回数量的,者会返回array类型
//找到所有的187开头的手机号,改为186,最后输出修改后的json
o.select("$..mobile[?(@ =~ /^187/)]").forEach(n->n.val("186")).toJson();
//找到data.list[1]下的的mobile字段,并转为long
o.select("$.data.list[1].mobile").getLong();

//查找所有手机号,并转为List<String> 
List<String> list = o.select("$..mobile").toObject(List.class);
//查询data.list下的所有mobile,并转为List<String>
List<String> list = o.select("$.data.list[*].mobile").toObject(List.class);
//找到187手机号的用户,并输出List<UserModel>
List<UserModel> list = o.select("$.data.list[?(@.mobile =~ /^187/)]")
                        .toObjectList(UserModel.class);
//或
List<UserModel> list = o.select("$.data.list[?(@.mobile =~ /^187/)]")
                        .toObjectList(UserModel.class);

项目地址:

展开阅读全文
点击加入讨论🔥(8) 发布并加入讨论🔥
本篇精彩评论
兄弟高产啊
2024-03-31 14:58
1
举报
8 评论
2 收藏
分享
返回顶部
顶部