高性能 Jsonpath 框架,Snack3 3.2.29 發佈

Snack3,一個高性能的 JsonPath 框架

借鑑了 Javascript 所有變量由 var 申明,及 Xml dom 一切都是 Node 的設計。其下一切數據都以ONode表示,ONode也即 One node 之意,代表任何類型,也可以轉換爲任何類型。

  • 強調文檔樹的操控和構建能力
  • 高性能Json path查詢(頂級的兼容性和性能)
  • 順帶支持序列化、反序列化
  • 基於 無參構造函數 + 字段 操作實現(反序列化時不會有觸發危險動作的風險)
<dependency>
  <groupId>org.noear</groupId>
  <artifactId>snack3</artifactId>
  <version>3.2.29</version>
</dependency>

本次累計更新:

  • 增加對 Properties 數組的轉換支持
  • 增加 @ONodeAttr(ignore,incNull)
  • 增加特性:Feature.TransferCompatible (傳輸兼容處理)
  • 增加對 isFinal 字段的注入支持
  • 當類型爲 interface 時,支持將 string 自動轉換爲 object
  • 優化異常處理
  • 增加 新特性 UseSetter(即允許使用 setXxx)
  • 枚舉支持字符大小寫
  • 增加字符串 "true" 轉爲 Boolean
  • 增新加特性 Feature.DisThreadLocal
  • 增加嵌套泛型反序列化支持
  • 增加對 kotlin data class 和 jdk14+ record 的序列化與反序列化支持

簡單演示:

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

項目地址:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章