snack4-jsonpath v4.0.2 發布
基于jdk8。支持:Json Dom 的構建、編碼解轉換、獲取、JsonPath 查詢、JsonSchema 驗證。
<dependency>
<groupId>org.noear</groupId>
<artifactId>snack4-jsonpath</artifactId>
<version>4.0.2</version>
</dependency>
Snack-Jsonpath 借鑒了 Javascript 所有變量由 var 申明,及 Xml dom 一切都是 Node 的設計。其下一切數據都以ONode表示,ONode也即 One node 之意,代表任何類型,也可以轉換為任何類型。
- 強調文檔樹的構建和操控能力
- 高性能
Json path查詢(比 jayway.jsonpath 快很多倍)。同時兼容jayway.jsonpath和 IETF JSONPath (RFC 9535) 標準 (用options切換)。為下一個十年提供強勁的 JsonPath 體驗。 - 支持
Json schema架構校驗 - 支持
json5部分特性(無鍵字段,注釋,等...) - 優先使用 無參構造函數 + 字段 編解碼(可減少注入而觸發動作的風險)
依賴包清單:
| 依賴包 | 描述 |
|---|---|
org.noear:snack4 |
提供 json dom 構建和編解碼支持 |
org.noear:snack4-jsonpath |
提供 json path 查詢支持 |
org.noear:snack4-jsonschema |
提供 json schema 校驗支持 |
開源項目倉庫地址:
文檔資料:
1、版本更新說明
- 添加 ONodeCreator 靜態方法的支持(普通類)
- 添加 ONodeAttr:ignore 注解屬性支持
- 添加 Write_BooleanAsNumber 新特性
- 添加 Read_UseBigDecimalMode 新特性
- 添加 Read_UseBigIntegerMode 新特性
- 添加 Write_BigDecimalAsPlain 特性
- 添加 DecodeContext:hasFeature, EncodeContext:hasFeature 新特性
- 調整 ONode:nodeType,getType 合并為
type()與options()保持相同風格 - 調整 QueryContext:isInFilter 更名為
isFiltered() - 調整 Write_BigNumbersAsString 更名為 Write_DoubleAsString
- 優化 Write_Nulls 完善對 Map 輸出的控制
- 優化 Write_BrowserCompatible 寫入性能
- 優化 與 snack3 的效果兼容性
2、JSONPath 語法參考
| 語法元素 | 描述 |
|---|---|
$ |
根節點標識符 |
@ |
當前節點標識符(僅在過濾選擇器中有效) |
[<selectors>] |
子段:選擇節點的零個或多個子節點 |
.name |
簡寫 ['name'] |
.* |
簡寫 [*] |
..[<selectors>] |
后代段:選擇節點的零個或多個后代 |
..name |
簡寫 ..['name'] |
..* |
簡寫 ..[*] |
'name' |
名稱選擇器:選擇對象的命名子對象 |
* |
通配符選擇器:選擇節點的所有子節點 |
3 |
索引選擇器:選擇數組的索引子項(從 0 開始) |
0:100:5 |
數組切片選擇器:數組的 start:end:step |
?<logical-expr> |
過濾選擇器:使用邏輯表達式選擇特定的子項 |
fun(@.foo) |
過濾函數:在過濾表達式中調用函數(IETF 標準) |
.fun() |
聚合函數:作為片段使用(jayway 風格) |
過濾選擇器語法參考:
| 語法 | 描述 | 優先級 |
|---|---|---|
(...) |
分組 | 5 |
name(...) |
函數擴展 | 5 |
! |
邏輯 非 |
4 |
==,!=,<,<=,>,>= |
關系比較符 | 3 |
&& |
邏輯 與 |
2 |
|| |
邏輯 或 |
1 |
IETF JSONPath (RFC 9535) 標準定義操作符(支持)
| 操作符 | 描述 | 示例 |
|---|---|---|
== |
左等于右(注意1不等于'1') | $[?(@.a == 1)] |
!= |
左不等于右 | $[?(@.a != 1)] |
< |
左比右小 | $[?(@.a < 1)] |
<= |
左小于或等于右 | $[?(@.a <= 1)] |
> |
左大于右 | $[?(@.a > 1)] |
>= |
左大于等于右 | $[?(@.a >= 1)] |
jayway.jsonpath 增量操作符(支持)
| 操作符 | 描述 | 示例 |
|---|---|---|
=~ |
左匹配正則表達式 | [?(@.s =~ /foo.*?/i)] |
in |
左存在于右 | [?(@.s in ['S', 'M'])] |
nin |
左不存在于右 | |
subsetof |
左是右的子集 | [?(@.s subsetof ['S', 'M', 'L'])] |
anyof |
左與右有一個交點 | [?(@.s anyof ['M', 'L'])] |
noneof |
左與右沒有交集 | [?(@.s noneof ['M', 'L'])] |
size |
左(數組或字符串)的大小應該與右匹配 | $[?(@.s size @.expected_size)] |
empty |
Left(數組或字符串)應該為空 | $[?(@.s empty false)] |
IETF JSONPath (RFC 9535) 標準定義函數(支持)
| 函數 | 描述 | 參數類型 | 結果類型 |
|---|---|---|---|
length(x) |
字符串、數組或對象的長度 | 值 | 數值 |
count(x) |
節點列表的大小 | 節點列表 | 數值 |
match(x,y) |
正則表達式完全匹配 | 值,值 | 邏輯值 |
search(x,y) |
正則表達式子字符串匹配 | 值,值 | 邏輯值 |
value(x) |
節點列表中單個節點的值 | 節點列表 | 值 |
jayway.jsonpath 函數(支持)
| 函數 | 描述 | 輸出類型 |
|---|---|---|
length() |
字符串、數組或對象的長度 | Integer |
min() |
查找當前數值數組中的最小值 | Double |
max() |
查找當前數值數組中的最大值 | Double |
avg() |
計算當前數值數組中的平均值 | Double |
stddev() |
計算當前數值數組中的標準差 | Double |
sum() |
計算當前數值數組中的總和 | Double |
keys() |
計算當前對象的屬性鍵集合 | Set<E> |
concat(X) |
將一個項或集合和當前數組連接成一個新數組 | like input |
append(X) |
將一個項或集合 追加到當前路徑的輸出數組中 | like input |
first() |
返回當前數組的第一個元素 | 依賴于數組元素類型 |
last() |
返回當前數組的最后一個元素 | 依賴于數組元素類型 |
index(X) |
返回當前數組中索引為X的元素。X可以是負數(從末尾開始計算) | 依賴于數組元素類型 |

浙公網安備 33010602011771號