javascript
java json path_Java使用JSONPath解析JSON完整内容详解
JsonPath是一種簡單的方法來提取給定JSON文檔的部分內(nèi)容。 JsonPath有許多編程語言,如Javascript,Python和PHP,Java。
JsonPath提供的json解析非常強大,它提供了類似正則表達式的語法,基本上可以滿足所有你想要獲得的json內(nèi)容。
maven中添加jar包
JsonPath可在Central Maven存儲庫中找到。 Maven用戶將其添加到您的POM。
com.jayway.jsonpath json-path 2.2.0
操作符
操作
說明
$
表示根元素
@
當前元素
. or []
子元素
n/a
父元素
*
通配符,表示所有的元素
. .
選擇所有符合條件的節(jié)點
[]
迭代器標示,如數(shù)組下標
[,]
連接操作符在XPath 結(jié)果合并其它結(jié)點集合。JSONP允許name或者數(shù)組索引。
[start?step]
數(shù)組切片操作
?()
過濾表達式
()
支持表達式計算
函數(shù)
函數(shù)可以在路徑的尾部調(diào)用,函數(shù)的輸出是路徑表達式的輸出,該函數(shù)的輸出是由函數(shù)本身所決定的。
函數(shù)
描述
輸出
min()
提供數(shù)字數(shù)組的最小值
Double
max()
提供數(shù)字數(shù)組的最大值
Double
avg()
提供數(shù)字數(shù)組的平均值
Double
stddev()
提供數(shù)字數(shù)組的標準偏差值
Double
length()
提供數(shù)組的長度
Integer
過濾器運算符
過濾器是用于篩選數(shù)組的邏輯表達式。一個典型的過濾器將是[?(@.age > 18)],其中@表示正在處理的當前項目。 可以使用邏輯運算符&&和||創(chuàng)建更復(fù)雜的過濾器。 字符串文字必須用單引號或雙引號括起來([?(@.color == ‘blue')] 或者 [?(@.color == “blue”)]).
操作符
描述
==
left等于right(注意1不等于'1')
!=
不等于
<
小于
<=
小于等于
>
大于
>=
大于等于
=~
匹配正則表達式[?(@.name =~ /foo.*?/i)]
in
左邊存在于右邊 [?(@.size in [‘S', ‘M'])]
nin
左邊不存在于右邊
size
(數(shù)組或字符串)長度
empty
(數(shù)組或字符串)為空
Java操作示例
json格式的數(shù)據(jù):
{
"text": "張三",
"expensive": 6,
"body": {
"rvNoNum": 23,
"rvNoRecords": [{
"score": 4,
"rvAddress": "2",
"consignments": null
}, {
"score": 8,
"rvAddress": "3",
"consignments": null
}]
}
}
測試代碼:
private static void jsonPathTest() {
JSONObject responseJson= jsonTest();//調(diào)用自定義的jsonTest()方法獲得json對象,生成上面的json
//輸出text的值
String text = JsonPath.read(responseJson,"$.text");
//輸出rvNoNum的值
int rvNoNum = JsonPath.read(responseString,"$.body.rvNoNum");
//輸出rvNoRecords數(shù)組的第2個值
List rvNoRecords = JsonPath.read(responseString,"$..rvNoRecords[1]");
//輸出rvNoRecords數(shù)組的第1和第2個值
List rvNoRecords1 = JsonPath.read(responseString,"$..rvNoRecords[0,1]");
//輸出rvNoRecords數(shù)組中score<=expensive的所有值
List rvNoRecords2 = JsonPath.read(responseString,"$..rvNoRecords[?(@.score < $['expensive'])]");
//輸出rvNoRecords[0]的rvAddress值
String rvAddress1 = JsonPath.read(responseJson, "$.body.rvNoRecords[0].rvAddress");
//輸出全部rvAddress的值,使用Iterator迭代
List rvAddress = JsonPath.read(responseJson,"$.body.rvNoRecords[*].rvAddress");
//輸出rvNoRecords[*]中rvAddress== '2'的rvNoRecords
List rvAddress2 = JsonPath.read(responseJson,"$.body.rvNoRecords[?(@.rvAddress == 2)]");
//輸出rvNoRecords[*]中score>5 的rvNoRecords
List score = JsonPath.read(responseJson,"$.body.rvNoRecords[?(@.score>5)]");
//輸出rvNoRecords[*]中含有consignments元素的rvNoRecords
List consignments = JsonPath.read(responseString,"$.body.rvNoRecords[?(@.consignments)]");
//輸出該json中所有rvAddress的值
List rvNoNum2 = JsonPath.read(responseString,"$..rvAddress");
//輸出rvNoRecords數(shù)組的長度
List length = JsonPath.read(responseString,"$..rvNoRecords.length()");
//可以提前編輯一個路徑,并多次使用它
JsonPath path = JsonPath.compile("$.body.rvNoRecords[*]");
List rvNoRecords3 = path.read(responseString);
}
到此這篇關(guān)于使用 JSONPath 解析 JSON 完整內(nèi)容詳解的文章就介紹到這了,更多相關(guān)使用 JSONPath 解析 JSON 完整內(nèi)容詳解內(nèi)容請搜索我們以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持我們!
時間: 2020-03-22
總結(jié)
以上是生活随笔為你收集整理的java json path_Java使用JSONPath解析JSON完整内容详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python tkinter选择路径控件
- 下一篇: spring手动回滚事务_Spring总