java json path_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 rvNoRecords = JsonPath.read(responseString,"$..rvNoRecords[1]");

//输出rvNoRecords数组的第1和第2个值

List rvNoRecords1 = JsonPath.read(responseString,"$..rvNoRecords[0,1]");

//输出rvNoRecords数组中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数组的长度

List length = JsonPath.read(responseString,"$..rvNoRecords.length()");

//可以提前编辑一个路径,并多次使用它

JsonPath path = JsonPath.compile("$.body.rvNoRecords[*]");

List rvNoRecords3 = path.read(responseString);

}

7eeb0b84a3a9283c2d424727ee5fda93.png

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

时间: 2020-03-22

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/471554.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 2050. 并行课程 III(拓扑排序)

文章目录1. 题目2. 解题1. 题目 给你一个整数 n &#xff0c;表示有 n 节课&#xff0c;课程编号从 1 到 n 。 同时给你一个二维整数数组 relations &#xff0c;其中 relations[j] [prevCoursej, nextCoursej] &#xff0c;表示课程 prevCoursej 必须在课程 nextCoursej 之前…

LeetCode 1521. 找到最接近目标值的函数值(位运算)

文章目录1. 题目2. 解题1. 题目 Winston 构造了一个如上所示的函数 func 。他有一个整数数组 arr 和一个整数 target &#xff0c;他想找到让 |func(arr, l, r) - target| 最小的 l 和 r 。 请你返回 |func(arr, l, r) - target| 的最小值。 请注意&#xff0c; func 的输入参…

LeetCode 2053. 数组中第 K 个独一无二的字符串(哈希)

文章目录1. 题目2. 解题1. 题目 独一无二的字符串 指的是在一个数组中只出现过 一次 的字符串。 给你一个字符串数组 arr 和一个整数 k &#xff0c;请你返回 arr 中第 k 个 独一无二的字符串 。 如果 少于 k 个独一无二的字符串&#xff0c;那么返回 空字符串 “” 。 注意…

LeetCode 2055. 蜡烛之间的盘子(前缀和)

文章目录1. 题目2. 解题1. 题目 给你一个长桌子&#xff0c;桌子上盘子和蜡烛排成一列。 给你一个下标从 0 开始的字符串 s &#xff0c;它只包含字符 * 和 | &#xff0c;其中 * 表示一个 盘子 &#xff0c;| 表示一支 蜡烛 。 同时给你一个下标从 0 开始的二维整数数组 que…

策略模式java 用例_java策略模式简单用例

运用java策略模式一个小程序/****/package Strategy;import java.util.Arrays;/*** author HuangRong* Funtion 定义策略*/public interface ComputablesStra {public abstract void printForm();}/****/package Strategy;/*** author HuangRong* Function 为策略模式中的上下文…

LeetCode 2057. 值相等的最小索引

文章目录1. 题目2. 解题1. 题目 给你一个下标从 0 开始的整数数组 nums &#xff0c;返回 nums 中满足 i mod 10 nums[i] 的最小下标 i &#xff1b;如果不存在这样的下标&#xff0c;返回 -1 。 x mod y 表示 x 除以 y 的 余数 。 示例 1&#xff1a; 输入&#xff1a;num…

LeetCode 2058. 找出临界点之间的最小和最大距离(链表)

文章目录1. 题目2. 解题1. 题目 链表中的 临界点 定义为一个 局部极大值点 或 局部极小值点 。 如果当前节点的值 严格大于 前一个节点和后一个节点&#xff0c;那么这个节点就是一个 局部极大值点 。 如果当前节点的值 严格小于 前一个节点和后一个节点&#xff0c;那么这个…

LeetCode 2059. 转化数字的最小运算数(BFS)

文章目录1. 题目2. 解题1. 题目 给你一个下标从 0 开始的整数数组 nums &#xff0c;该数组由 互不相同 的数字组成。另给你两个整数 start 和 goal 。 整数 x 的值最开始设为 start &#xff0c;你打算执行一些运算使 x 转化为 goal 。你可以对数字 x 重复执行下述运算&…

又是一年国庆假期最后一天

时间过的真的很快啊&#xff0c;美好的日子已经快过完了&#xff0c;在长假的最后一天&#xff0c;有很多的朋友可能都会抱怨&#xff0c;不想上班了&#xff0c;好想在好好的玩玩。开开心心的过完了假期的前六天&#xff0c;当突然被告知明天就是最后一天&#xff0c;你会有什…

LeetCode 2062. 统计字符串中的元音子字符串

文章目录1. 题目2. 解题1. 题目 子字符串 是字符串中的一个连续&#xff08;非空&#xff09;的字符序列。 元音子字符串 是 仅 由元音&#xff08;a、e、i、o 和 u&#xff09;组成的一个子字符串&#xff0c;且必须包含 全部五种 元音。 给你一个字符串 word &#xff0c;…

1006实验一实验报告

实验一报告 实验一、DOS命令解释程序的编写 13物联网工程 张学玲 201306104140 一、 实验目的 &#xff08;1&#xff09;认识DOS&#xff1b; &#xff08;2&#xff09;掌握命令解释程序的原理&#xff1b; &#xff08;3&#xff09;掌握简单的DOS调用方法&#xff1b; &a…

LeetCode 2063. 所有子字符串中的元音(数学)

文章目录1. 题目2. 解题1. 题目 给你一个字符串 word &#xff0c;返回 word 的所有子字符串中 元音的总数 &#xff0c;元音是指 a、e、i、o 和 u 。 子字符串 是字符串中一个连续&#xff08;非空&#xff09;的字符序列。 注意&#xff1a;由于对 word 长度的限制比较宽松…

LeetCode 2064. 分配给商店的最多商品的最小值(二分查找)

文章目录1. 题目2. 解题1. 题目 给你一个整数 n &#xff0c;表示有 n 间零售商店。 总共有 m 种产品&#xff0c;每种产品的数目用一个下标从 0 开始的整数数组 quantities 表示&#xff0c;其中 quantities[i] 表示第 i 种商品的数目。 你需要将 所有商品 分配到零售商店&a…

LeetCode 2065. 最大化一张图中的路径价值(DFS)

文章目录1. 题目2. 解题1. 题目 给你一张 无向 图&#xff0c;图中有 n 个节点&#xff0c;节点编号从 0 到 n - 1 &#xff08;都包括&#xff09;。 同时给你一个下标从 0 开始的整数数组 values &#xff0c;其中 values[i] 是第 i 个节点的 价值 。同时给你一个下标从 0 开…

LeetCode 1739. 放置盒子(数学)

文章目录1. 题目2. 解题1. 题目 有一个立方体房间&#xff0c;其长度、宽度和高度都等于 n 个单位。 请你在房间里放置 n 个盒子&#xff0c;每个盒子都是一个单位边长的立方体。放置规则如下&#xff1a; 你可以把盒子放在地板上的任何地方。如果盒子 x 需要放置在盒子 y 的…

LeetCode 2068. 检查两个字符串是否几乎相等

文章目录1. 题目2. 解题1. 题目 如果两个字符串 word1 和 word2 中从 ‘a’ 到 ‘z’ 每一个字母出现频率之差都 不超过 3 &#xff0c;那么我们称这两个字符串 word1 和 word2 几乎相等 。 给你两个长度都为 n 的字符串 word1 和 word2 &#xff0c;如果 word1 和 word2 几乎…

Spring的@Scheduled任务调度

一. 定时任务实现方式 定时任务实现方式&#xff1a; Java自带的java.util.Timer类&#xff0c;这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行&#xff0c;但不能在指定时间运行。一般用的较少&#xff0c;这篇文章将不做详细介…

LeetCode 2069. 模拟行走机器人 II(模拟)

文章目录1. 题目2. 解题1. 题目 给你一个在 XY 平面上的 width x height 的网格图&#xff0c;左下角 的格子为 (0, 0) &#xff0c;右上角 的格子为 (width - 1, height - 1) 。 网格图中相邻格子为四个基本方向之一&#xff08;"North"&#xff0c;"East&quo…

eclipse php xdebug,Eclipse for php + Xdebug搭建PHP的调试环境

Eclipse for php Xdebug搭建PHP的调试环境Eclipse for php Xdebug搭建PHP的调试环境第二步&#xff1a;下载Xdebug (下载地址位于&#xff1a; http://xdebug.org/download.php&#xff0c;我的PHP版本为 PHP 5.3.28 Thread Safety&#xff0c; Apach为2.2.25&#xff0c;使用…

ROS2.9.27架设网吧软路由实战篇之端口映射与回流

转载&#xff1a;http://blog.csdn.net/zm2714/article/details/7924280 上一篇&#xff1a;ROS2.9.27架设网吧软路由实战篇之连通网络&#xff0c;主要讲述了网吧架设软路由ROS2.9.27的基本配置&#xff0c;目的就是使网吧能顺利连接外网。没有涉及到更丰富的其它功能和网络安…