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",
			"consignments": null
		}, {
			"score": 8,
			"rvAddress": "3",
			"consignments": null
		}]
	}
}

测试代码:

private static void jsonPathTest() {
 JSONObject responseJson= jsonTest();//调用自定义的jsonTest()方法获得json对象,生成上面的json
 //输出text的值
 String text = JsonPath.read(responseJson,"$.text");

 //输出rvNoNum的值
 int rvNoNum = JsonPath.read(responseString,"$.body.rvNoNum");

	//输出rvNoRecords数组的第2个值
	List<Object> rvNoRecords = JsonPath.read(responseString,"$..rvNoRecords[1]");

	//输出rvNoRecords数组的第1和第2个值
 List<Object> rvNoRecords1 = JsonPath.read(responseString,"$..rvNoRecords[0,1]");

	//输出rvNoRecords数组中score<=expensive的所有值
	List<Object> rvNoRecords2 = JsonPath.read(responseString,"$..rvNoRecords[?(@.score < $['expensive'])]");

 //输出rvNoRecords[0]的rvAddress值
 String rvAddress1 = JsonPath.read(responseJson, "$.body.rvNoRecords[0].rvAddress");

 //输出全部rvAddress的值,使用Iterator迭代
 List<String> rvAddress = JsonPath.read(responseJson,"$.body.rvNoRecords[*].rvAddress");

 //输出rvNoRecords[*]中rvAddress== '2'的rvNoRecords
 List<Object> rvAddress2 = JsonPath.read(responseJson,"$.body.rvNoRecords[?(@.rvAddress == 2)]");  

 //输出rvNoRecords[*]中score>5 的rvNoRecords
 List<Object> score = JsonPath.read(responseJson,"$.body.rvNoRecords[?(@.score>5)]");

 //输出rvNoRecords[*]中含有consignments元素的rvNoRecords
 List<Double> consignments = JsonPath.read(responseString,"$.body.rvNoRecords[?(@.consignments)]");

 //输出该json中所有rvAddress的值
 List<Object> rvNoNum2 = JsonPath.read(responseString,"$..rvAddress");

 //输出rvNoRecords数组的长度
 List<Object> length = JsonPath.read(responseString,"$..rvNoRecords.length()");

 //可以提前编辑一个路径,并多次使用它
 JsonPath path = JsonPath.compile("$.body.rvNoRecords[*]");
 List<Object> rvNoRecords3 = path.read(responseString);
}

到此这篇关于使用 JSONPath 解析 JSON 完整内容详解的文章就介绍到这了,更多相关使用 JSONPath 解析 JSON 完整内容详解内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python使用jsonpath-rw模块处理Json对象操作示例

    本文实例讲述了Python使用jsonpath-rw模块处理Json对象操作.分享给大家供大家参考,具体如下: 这两天在写一个爬虫,需要从网站返回的json数据提取一些有用的数据. 向url发起请求,返回的是response,在python3中,response.content是二进制bytes类型的,需要用decode()转成unicode的str类型 #如果用的requests发的请求 import json response = requests.get(url,headers=self.

  • Python json模块与jsonpath模块区别详解

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写.同时也方便了机器进行解析和生成.适用于进行数据交互的场景,比如网站前台与后台之间的数据交互. JSON和XML相比较可谓不相上下. Python 3.X中自带了JSON模块,直接import json就可以使用了. 官方文档:http://docs.python.org/library/json.html Json在线解析网站:http://www.json.cn/ JS

  • python的json中方法及jsonpath模块用法分析

    本文实例讲述了python的json中方法及jsonpath模块用法.分享给大家供大家参考,具体如下: 什么是json JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写.同时也方便了机器进行解析和生成.适用于进行数据交互的场景,比如网站前台与后台之间的数据交互. json模块中方法的学习 其中类文件对象的理解: 具有read()或者write()方法的对象就是类文件对象,比如f = open("a.txt",

  • 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 操作符 操作 说明 $

  • Android中gson、jsonobject解析JSON的方法详解

    JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交换.JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为. JSON对象: JSON中对象(Object)以"{"开始, 以"}"结束. 对象中的每一个item都是一个key-value对, 表现为"key:value"的形式, ke

  • JavaScript处理解析JSON数据过程详解

    JSON (JavaScript Object Notation)一种简单的数据格式,比xml更轻巧. JSON 是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON 数据不需要任何特殊的 API 或工具包. JSON的规则很简单: 对象是一个无序的"'名称/值'对"集合.一个对象以"{"(左括号)开始,"}"(右括号)结束.每个"名称"后跟一个":"(冒号):"

  • Ajax responseText解析json数据案例详解

    解决ajax处理服务器端返回结果responseText中是JSON的数据. 第一,json格式的文件内容如下: { "city":"ShangHai", "telephone":"123456789" } 第二,服务器端返回的json数据就是上述的内容在responseText中,现在要取出来,方法有两种: 方法1: var json=JSON.parse(request.responseText); alert(json.

  • Java实现动物换位游戏完整 过程详解

    目录 效果展示 一.效果展示 1.游戏界面 2.测试界面 二.项目介绍 1.总体需求 2.总体设计 三.代码展示 1.图形界面设计(gui包) 2.用户操作设计(data包) ① Animal类 ② LeftAnimal类 ③ RightAnimal类 ④ Point类 ⑤ ViewForAnimal类 3.游戏视图设计(view包) ① AnmialView类 ② GamePanel类 ③ HandleAnimalMove类 ④ HandleRedo类 ⑤ HandleReStart类 四.代

  • java web中对json的使用详解

    一.在Java Web的开发过程中,如果希望调用Java对象转化成JSON对象等操作.则需要引入以下jar包,不然运行时则报错. 1.commons-beanutils.jar 2.commons-collections.jar 3.commons-lang.jar 4.commons-logging-1.1.jar 5.ezmorph-1.0.3.jar 6.json-lib-2.0-jdk15.jar 7.有人说还需要 commons-httpclient.jar 引入成功之后,使用JSON

  • C++解析Json的方法详解【jsoncpp】

    本文实例讲述了C++解析Json的方法.分享给大家供大家参考,具体如下: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,和xml类似,本文主要对VS2008中使用Jsoncpp解析json的方法做一下记录. Jsoncpp是个跨平台的开源库,下载地址:http://sourceforge.net/projects/jsoncpp/,我下载的是v0.5.0,压缩包大约104K. 方法一:使用Jsoncpp生成的lib文件 解压上面下载的Jsoncpp

  • JavaScript转换与解析JSON方法实例详解

    本文实例讲述了JavaScript转换与解析JSON方法.分享给大家供大家参考,具体如下: json格式数据如下: var json = { 'jquery': [{ "id": "1", "type": "ASP.NET", "title": "JSON全解析"}] } alert(json.jquery[0].id); alert(json.jquery[0].type); aler

  • JAVA通过XPath解析XML性能比较详解

    最近在做一个小项目,使用到XML文件解析技术,通过对该技术的了解和使用,总结了以下内容. 1 XML文件解析的4种方法 通常解析XML文件有四种经典的方法.基本的解析方式有两种,一种叫SAX,另一种叫DOM.SAX是基于事件流的解析,DOM是基于XML文档树结构的解析.在此基础上,为了减少DOM.SAX的编码量,出现了JDOM,其优点是,20-80原则(帕累托法则),极大减少了代码量.通常情况下JDOM使用时满足要实现的功能简单,如解析.创建等要求.但在底层,JDOM还是使用SAX(最常用).D

  • 使用Java构造和解析Json数据的两种方法(详解二)

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON数据不须要任何特殊的 API 或工具包. 在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面接着介绍用org.json构造和解析Json数据的方法

随机推荐