Snack3 3.2 发布,轻量的Json+Jsonpath框架
Snack3 是一个轻量的 JSON + Jsonpath 框架。
借鉴了 Javascript 所有变量由 var 申明,及 Xml dom 一切都是 Node 的设计。其下一切数据都以ONode表示,ONode也即 One node 之意,代表任何类型,也可以转换为任何类型。
- 强调文档树的操控和构建能力
- 做为中间媒体,方便不同格式互转
- 高性能Json path查询(兼容性和性能很赞)
- 支持序列化、反序列化
- 基于 无参构造函数 + 字段 操作实现(反序列化时不会有触发危险动作的风险)
<dependency>
<groupId>org.noear</groupId>
<artifactId>snack3</artifactId>
<version>3.2.7</version>
</dependency>
本次累计更新:
- 增加自定义编码与解码支持
public class DemoTest {
public void test(UserDto user) {
Options options = Options.def();
options.addEncoder(Date.class, (data, node)->{
node.val().setNumber(data.getTimes());
});
ONode oNode = ONode.loadObj(user, options);
}
}
- 增加 @ONodeAttr 注解,取代旧的 @NodeName
public class UserModel {
public int id;
@ONodeAttr(serialize = false)
public String name;
@ONodeAttr(deserialize = false)
public String note;
@ONodeAttr(format = "yyyyMMdd")
public Date date;
}
- 增加更复杂的泛型传导
@lombok.Data
public class Data<X> {
private List<X> content;
private X obj;
private int pageNum;
private int pageSize;
private int totalElements;
private int pages;
}
@lombok.Data
public class House {
private String sn;
private String dver_type;
private String data_status;
private String created_by;
private String updated_by;
private String updated_date;
}
@lombok.Data
public class Result<T> {
private int code;
private Data<T> data;
}
Result<House> result = ONode.deserialize(json, new Result<House>() {}.getClass());
- 增加对成员类的反序列化支持
public class Server {
public static class One{
public int id;
public String name;
}
}
Server.One one = ONode.deserialize(json, Server.One.class);
- 增加接口 ONode::getRawString()
- 增加接口 ONode::getRawNumber()
- 增加接口 ONode::getRawBoolean()
- 增加接口 ONode::getRawDate()
- 增加接口 Options::getFeatures()
- 增加接口 ONode::options(ops->...);
- 调整接口 ONode::get(key) ,不再自动为文档树添加节点;如有需要改用 ONode::getOrNew(key)
- 等等