高效能 Jsonpath 框架,Snack3 3.2.57 釋出

帶刺的坐椅發表於2023-03-04

Snack3,一個高效能的 JsonPath 框架

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

  • 強調文件樹的操控和構建能力
  • 高效能Json path查詢(頂級的相容性和效能)
  • 順帶支援序列化、反序列化
  • 基於 無參建構函式 + 欄位 操作實現(反序列化時不會有觸發危險動作的風險)
<dependency>
  <groupId>org.noear</groupId>
  <artifactId>snack3</artifactId>
  <version>3.2.57</version>
</dependency>

本次累計更新:

  • 增加 ClassLoader 自動指定能力
  • 增加 @NodeAttr 對 LocalTime,LocalDate,LocalDateTime 有效
  • 增加 selectOrNew() 介面,可根據 jsonpath 表示式構建結構;
ONode oNode = new ONode();
oNode.selectOrNew("$.orders[0].price").val(500);
System.out.println(oNode.toJson());
//{"orders":[{"price":500}]}

簡單演示:

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

專案地址:

相關文章