json框架有哪些,Snack3,一个高性能的 JsonPath 框架
借鉴了 Javascript 所有变量由 var 申明,及 Xml dom 一切都是 Node 的设计。其下一切数据都以ONode表示,ONode也即 One node 之意,代表任何类型,也可以转换为任何类型。
- 强调文档树的操控和构建能力
- 高性能Json path查询(顶级的兼容性和性能)
- 顺带支持序列化、反序列化
- 基于 无参构造函数 + 字段 操作实现(反序列化时不会有触发危险动作的风险)
<dependency> <groupId>org.noear</groupId> <artifactId>snack3</artifactId> <version>3.2.65</version> </dependency>
本次累计更新:
- 增加 File 类型反序化支持
- 增加泛型多层嵌套支持: List<List>、Map<String,List>
- 增加 NodeAttr 注解对时区的配置支持
- 修复 "{names:null}" 转为 A{names:List} 时, 会变成 A{names:List=[null]} 的问题
- 修复非静态成员类序列化时会死循环的问题
- 添加特性(ParseIntegerUseLong,解析时可让所有整型为长整型
- 添加漂亮格式化特性支持
简单演示:
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;
项目地址:
- https://gitee.com/noear/snack3
- https://github.com/noear/snack3