Java使⽤JSONPath解析JSON完整内容详解
JsonPath是⼀种简单的⽅法来提取给定JSON⽂档的部分内容。 JsonPath有许多编程语⾔,如Javascript,Python和PHP,Java。
JsonPath提供的json解析⾮常强⼤,它提供了类似正则表达式的语法,基本上可以满⾜所有你想要获得的json内容。
maven中添加jar包
JsonPath可在Central Maven存储库中到。 Maven⽤户将其添加到您的POM。
com.jayway.jsonpath json-path 2.2.0
操作符
操作说明
$表⽰根元素
@当前元素
. or []⼦元素
n/a⽗元素
*通配符,表⽰所有的元素
. .选择所有符合条件的节点
[]迭代器标⽰,如数组下标
[,]连接操作符在XPath 结果合并其它结点集合。JSONP允许name或者数组索引。
[start?step]数组切⽚操作
()过滤表达式
()⽀持表达式计算
函数
函数可以在路径的尾部调⽤,函数的输出是路径表达式的输出,该函数的输出是由函数本⾝所决定的。
函数描述输出
min()提供数字数组的最⼩值Double
max()提供数字数组的最⼤值Double
avg()提供数字数组的平均值Double
stddev()提供数字数组的标准偏差值Double
length()提供数组的长度Integer
过滤器运算符
过滤器是⽤于筛选数组的逻辑表达式。⼀个典型的过滤器将是[?(@.age > 18)],其中@表⽰正在处理的当前项⽬。可以使⽤逻辑运算符&&和||创建更复杂的过滤器。字符串⽂字必须⽤单引号或双引号括起来([?(@.color == ‘blue')] 或者 [?(@.color == “blue”)]).
操作符描述
==left等于right(注意1不等于'1')
!=不等于
<⼩于
<=⼩于等于
>⼤于
>=⼤于等于
=~匹配正则表达式[?(@.name =~ /foo.*?/i)]
in左边存在于右边 [?(@.size in [‘S', ‘M'])]
nin左边不存在于右边
size(数组或字符串)长度
empty(数组或字符串)为空
Java操作⽰例
json格式的数据:
{
"text": "张三",
"expensive": 6,
"body": {
"rvNoNum": 23,
"rvNoRecords": [{
"score": 4,
"rvAddress": "2",
python json字符串转数组"consignments": null
}, {
"score": 8,
"rvAddress": "3",
"consignments": null
}]
}
}
测试代码:
private static void jsonPathTest() {
JSONObject responseJson= jsonTest();//调⽤⾃定义的jsonTest()⽅法获得json对象,⽣成上⾯的json
//输出text的值
String text = ad(responseJson,"$.text");
/
/输出rvNoNum的值
int rvNoNum = ad(responseString,"$.body.rvNoNum");
//输出rvNoRecords数组的第2个值
List<Object> rvNoRecords = ad(responseString,"$..rvNoRecords[1]");
//输出rvNoRecords数组的第1和第2个值
List<Object> rvNoRecords1 = ad(responseString,"$..rvNoRecords[0,1]");
//输出rvNoRecords数组中score<=expensive的所有值
List<Object> rvNoRecords2 = ad(responseString,"$..rvNoRecords[?(@.score < $['expensive'])]");
//输出rvNoRecords[0]的rvAddress值
String rvAddress1 = ad(responseJson, "$.body.rvNoRecords[0].rvAddress");
//输出全部rvAddress的值,使⽤Iterator迭代
List<String> rvAddress = ad(responseJson,"$.body.rvNoRecords[*].rvAddress");
//输出rvNoRecords[*]中rvAddress== '2'的rvNoRecords
List<Object> rvAddress2 = ad(responseJson,"$.body.rvNoRecords[?(@.rvAddress == 2)]");
//输出rvNoRecords[*]中score>5 的rvNoRecords
List<Object> score = ad(responseJson,"$.body.rvNoRecords[?(@.score>5)]");
//输出rvNoRecords[*]中含有consignments元素的rvNoRecords
List<Double> consignments = ad(responseString,"$.body.rvNoRecords[?(@.consignments)]");
//输出该json中所有rvAddress的值
List<Object> rvNoNum2 = ad(responseString,"$..rvAddress");
//输出rvNoRecords数组的长度
List<Object> length = ad(responseString,"$..rvNoRecords.length()");
//可以提前编辑⼀个路径,并多次使⽤它
JsonPath path = JsonPathpile("$.body.rvNoRecords[*]");
List<Object> rvNoRecords3 = ad(responseString);
}
到此这篇关于使⽤ JSONPath 解析 JSON 完整内容详解的⽂章就介绍到这了,更多相关使⽤ JSONPat
h 解析 JSON 完整内容详解内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论