• JSONPath - 用于JSON的XPath

  • 用来解析多层嵌套的json数据;JsonPath 是一种信息抽取类库,是从JSON文档中抽取指定信息的工具。

考虑到接下来计划开发一个自动化测试平台,在接口测试中会设置多个检查点,这时想到使用JSONPath来做检查点的校验。

  1. import com.alibaba.fastjson.JSONPath;
  2. import java.util.HashMap;
  3. import java.util.Map;
  4.  
  5. public class JSONPathDemo {
  6.  
  7. public static void main(String[] args) {
  8.  
  9. String json = "{\"store\":{\"book\":[{\"title\":\"高效Java\",\"price\":10.2},{\"title\":\"设计模式\",\"price\":12.21},{\"title\":\"重构\",\"isbn\":\"553\",\"price\":8},{\"title\":\"虚拟机\",\"isbn\":\"395\",\"price\":22}],\"bicycle\":{\"color\":\"red\",\"price\":19}}}";
  10. //String expression1 = (String) JSONPath.read(json,"$.store.book[0].title");
  11. //int expression2 = (int) JSONPath.read(json,"$.store.book[0].price");
  12.  
  13. // 设置的检查点,多个检查点用;分隔
  14. String params = "$.store.book[0].price=10.2;$.store.book[1].title=设计模式";
  15. String[] data = params.split(";");
  16. // 定义测试结果的标记
  17. Boolean flag = false;
  18.  
  19. //遍历数组,获取每一个检查点在json中对应的数据,存在map中
  20. Map<String, Object> map = new HashMap<>();
  21. for (int i = 0; i < data.length; i++) {
  22. map.put(data[i].split("=")[0], data[i].split("=")[1]);
  23. System.out.println("检查点"+ (i+1) +"返回的数据:" + JSONPath.read(json, data[i].split("=")[0]));
  24. System.out.println("检查点"+ (i+1) +"断言的数据:" + map.get(data[i].split("=")[0]));
  25.  
  26. //判断检查点数据与返回的json数据是否一致
  27. if (JSONPath.read(json, data[i].split("=")[0]) instanceof String) {
  28. if (JSONPath.read(json, data[i].split("=")[0]).equals(map.get(data[i].split("=")[0]))) {
  29. //System.out.println("Pass A");
  30. flag = true;
  31. } else {
  32. //System.out.println("Fail A");
  33. flag = false;
  34. break;
  35. }
  36. } else { // Object转String
  37. if ((JSONPath.read(json, data[i].split("=")[0]).toString()).equals((map.get(data[i].split("=")[0])))) {
  38. //System.out.println("Pass B");
  39. flag = true;
  40. } else {
  41. //System.out.println("Fail B");
  42. flag = false;
  43. break;
  44. }
  45. }
  46. }
  47. if (flag) {
  48. System.out.println("【测试执行结果:通过】");
  49. } else {
  50. System.out.println("【测试执行结果:失败】");
  51. }
  52. }
  53. }

JSONPath解析json的更多相关文章

  1. 使用jsonpath解析json内容

    JsonPath提供的json解析非常强大,它提供了类似正则表达式的语法,基本上可以满足所有你想要获得的json内容.下面我把官网介绍的每个表达式用代码实现,可以更直观的知道该怎么用它. 一.首先需要 ...

  2. 使用json-path解析json

    在我们的日常开发中,有时候需要从一个json字符串中获取一个值,或者从一段json字符串中获取到某些值,如果先使用Gson或Jackson转换成java对象在获取值,有些时候是很麻烦的,那么有没有一种 ...

  3. json-path解析json方便可靠

    JsonPath is to JSON what XPATH is to XML, a simple way to extract parts of a given document. JsonPat ...

  4. Python | JSON 数据解析(Json & JsonPath)

    一.什么是JSON? JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式.它基于 ECMAScript (欧洲计算机协会制定的js规范)的一 ...

  5. JAVA JSON解析:类XPATH解析JSON

    目前JAVA解析JSON的方式有很多种,json-lib啊,GJSON啊,等等都可以解析,但通常是将JSON转换为对象或者是LIST或者是MAP,对于我们测试人员来说,其实我们并不需要里面的全部信息, ...

  6. jsonpath对json数据进行分析校验做接口测试

    在做接口测试的时候, 我们需要对返回的数据进行分析校验, 一般返回的都是json格式的数据, 怎么来解析校验呢? 之前有看过使用递归遍历json数据的, 然后找到了jsonpath, 可以很方便的对j ...

  7. Kettle解析JSON错误,We MUST have the same number of values for all paths,We can not find and data with path [$.

    最近公司要从聚石塔上抽取数据,其中有JSON格式数据,所以学习一下Kettle解析JSON,碰到小小问题,记录一下: (1) 2015/07/15 15:22:48 - trade_detail.0 ...

  8. jsonpath解析淘票票,所有购票的城市

    解决一些反爬,校验. 复制所有请求头 import urllib.request # 请求url url = 'https://dianying.taobao.com/cityAction.json? ...

  9. Xamarin.Android下获取与解析JSON

    一.新建项目 1.新建一个Android项目,并命名为为NetJsonList 2.右击引用,选择添加引用,引用System.Json.dll 二.同步请求 既然是跨平台,我们自然不能按照java下的 ...

随机推荐

  1. oracle的隐藏的东东

    1: 在oracle中存在一种特殊的表单:dual 这是一张伪表,不是真正存在的 在日期的查询和触发器等多处用到 只展示系统当前时间: select sysdate from dual; 触发器:往往 ...

  2. (新手入门,学习笔记)通过NPM进行Vue.js的安装

    NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,本文只介绍如何通过NPM进行安装Vue.js NodeJS官方网站:http://nodejs.cn/downlo ...

  3. Java实现文件上传-按钮弹出上传页面

    转自: https://blessht.iteye.com/blog/1405057 最近自己在做一个小系统玩的时候涉及到了文件的上传,于是在网上找到Java上传文件的方案,最后确定使用common- ...

  4. iOS - 断言处理与调试

    一.Objective - C 中的断言: Objective - C 中的断言处理使用的是 NSAssertionHandler : 每个线程拥有它自己的断言处理器,它是 NSAssertionHa ...

  5. python3:类和实例

    面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可 ...

  6. 常用windbg命令(转)

    1.查看版本信息:version.vertarget. 2.查看模块信息:lm.!dlls.!lmvi等. 3.调用栈:用k命令显示调用栈,用.frames命令切换栈帧. 4.内存操作:读内存用d命令 ...

  7. 基于python3环境下搭建Robot Framework 自动化测试框架(一)

    大家都知道,Robot Framework 是基于python2 环境 的一套自动化测试工具,据说python 2 到2020年不维护,现在用python 3 的环境搭建Robot Framework ...

  8. MySQL基础day03 存储引擎和外键MySQL 5.6

    MySQL基础day03_存储引擎和外键-MySQL 5.6 外键的条件: 1,表的存储引擎为innodb存储引擎 2,表中外键字段的类型要与参考表的字段类型一致 3,外键字段要是索引类型中的一种 M ...

  9. Apache+Mysql+PHP 套件

    Apache+Mysql+PHP 套件   最近要装个Apache+Mysql+PHP的一个环境. google下后,发现现在的安装变得越来越简单了.不再需要麻烦的配置安装,只需简单执行个sh就搞定了 ...

  10. 【NOIP2013模拟】DY引擎

    题目 BOSS送给小唐一辆车.小唐开着这辆车从PKU出发去ZJU上课了. 众所周知,天朝公路的收费站超多的.经过观察地图,小唐发现从PKU出发到ZJU的所有路径只会有N(2<=N<=300 ...