Snack3 3.2 釋出,輕量的Json+Jsonpath框架

劉之西東發表於2022-01-08

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

專案地址:

相關文章