jsonpath 判断是否包含_jsonpath 使用初探

先来说说是怎么与JsonPath结缘的吧

接触JsonPath是源于做一个小工具,其实挺简单的一个需求:就是判断众多接口返回的json中http跳转链接能够正常跳转。拿到这个需求后考虑了一下,如果逐个接口去解析的话,肯定是不可能滴,因为每个接口返回的结构都是不一样的,所以这种做法果断放弃,以后的维护成本别甭说了╮(╯▽╰)╭。。后来经过和同事商量后决定采用路径来获取json对象 属性值的方式来实现,于是我上网百度关键字“路径 解析”,发现了这个我现在觉得还很强大的json解析工具,以此记录并和大家一起探讨

一、 简单介绍一下我对jsonpath的理解:

1、JsonPath是一个简单的从文档中抽取指定信息的工具,提供了多种语言版本,包括:Javascript、Java、Python和PHP,(以下我们以java为例来介绍)

2、JsonPath对于JSON来说相当于XPATH对于XML,语法与xml也有相通之处

3、使用JsonPath可以简单快速的来获取想要的json对象的某属性值,这一点在做接口灰盒测试的时候还是相当方便的

4、JsonPath更像一个查询器,可以单条件查询自己想要的元素,也可以复合查询想要的元素

5、JsonPath的底层采用Jsonsmart( 至于JsonSmart具体咋用,还没研究过。。。)

二、使用JsonPath依赖的jar包如下:

如果工程是用maven来管理相关依赖的话,需要在maven的配置文件中加入以下内容:

三、借助网上一张截图,给jsonpath的语法一个快照

四、通过实例快来体验一下jsonpath的强大功能吧

1、首页通过访问接口获取一个json字符串,代码如下:

接口返回的一级结构,newslist、hotvuser、focusimgs均为list

newslist下的某个对象的属性:

2、利用步骤1获取的json字符串 " baores"来看jsonpath的具体使用

a、输出result下的isloadmore所对应的value String checkurl = "$.result.isloadmore";

Boolean boolean1= JsonPath.read(baores, checkurl);

System.out.println(boolean1);

b、输出newslist列表中包含的所有对象 String checkurl2 = "$.result.newslist[*]";

List newslist = JsonPath.read(baores, checkurl2);

System.out.println(newslist);

c、输出newslist列表的第一个对象 Object object = JsonPath.read(baores, "$.result.newslist[0]");

System.out.println(object);

d、输出newslist列表中所有对象对应的属性username List username = JsonPath.read(baores, "$.result.newslist[*].username");

System.out.println(username);

e、输出newslist列表中第一个对象的title String title= JsonPath.read(baores, "$.result.newslist[0].title");

System.out.println(title);

f、输出newslist中mediatype=3的所有的对象 List finallist = JsonPath.read(baores, "$.result.newslist[?(@.mediatype ==3)]");

for(int i =0;i

System.out.println(finallist.get(i));

}

g、输出newslist中赞数大于10的所有对象 List finallist3 = JsonPath.read(baores, "$.result.newslist[?(@.praisenum > 10)]");

for(int i =0;i

System.out.println(finallist3.get(i));

}

h、输出newslist中含有userid的所有对象 List finallist4 = JsonPath.read(baores, "$.result.newslist[?@.userid]");

for(int i =0;i

System.out.println(finallist4.get(i));

}

j、我们还可以先编辑好一个路径,在多个地方重复使用 JsonPath path = JsonPath.compile("$.result.hotvuser");

List userlist = path.read(baores);

for(int i =0;i

System.out.println(userlist.get(i));

}

k、我们还可以自定义过滤器来获取想要的任何元素,可以多条件查询;

下面例子查找: newslist中存在indentifiertype,并且username为 "韩路出品", "车比得" 的对象

Filter filter = Filter.filter(Criteria.where("identifiertype").exists(true).and("username").in("韩路出品", "车比得"));

List finallist5 = JsonPath.read(baores, "$.result.newslist[?]", filter);

for(int i =0;i

System.out.println(finallist5.get(i));

}

Jsonpath的语法就先介绍到这里,其实jsonpath还封装了断言,但是目前这一块还没研究的特别透彻,等啥时候研究明白了再更新此贴 (好尴尬的说。。。)

第一次在社区写帖子,不足之处望大家多多指正,JsonPath 的强大功能等着你我,我们大家继续去挖掘吧


版权声明:本文为weixin_39770311原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。