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)
- 等等