• 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. 锋利的jQuery ——jQuery中的事件和动画(四)

    一.jQuery中的事件 1)加载DOM $(document).ready()和window.onload的区别 1>执行时机 $(document).ready(){}  方法内注册的事件, ...

  2. 你不知道的props和state

    State 与 Props 区别props 是组件对外的接口,state 是组件对内的接口.组件内可以引用其他组件,组件之间的引用形成了一个树状结构(组件树),如果下层组件需要使用上层组件的数据或方法 ...

  3. VMware Workstation 卸载时卡在“正在卸载网络驱动程序(Virtual Network Editor夯死)”

    出现此种问题,以下方式均无法成功卸载: 控制面板-卸载程序(Virtual Network Editor 未响应) Geek 卸载VMware Workstation(Virtual Network ...

  4. Python变量类型及变量

    python是解释性语言 什么是解释性语言 就相当于你去饭店,你点了10道菜,他做好1道给你上1道.解释一行,执行一行.速度上不如编译性语言快. 什么是编译性语言 就相当于去饭店吃饭,你点了10道菜, ...

  5. impala常用语法

    参考:https://www.w3cschool.cn/impala/impala_alter_table.html

  6. Git工程开发实践(四)——Git分支管理策略

    A successful Git branching model https://nvie.com/posts/a-successful-git-branching-model/ Git工程开发实践( ...

  7. bzoj4764 弹飞大爷 LCT

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4764 题解 如果 \(a_i > 0\) 的话,那么就是 bzoj2002 的原题.直接 ...

  8. Alter改变终结

    #alter#删除date列但若表中只有一个字段无法使用drop删除ALTER TABLE z_staff_info_copy1 DROP `date`;ALTER TABLE z_staff_inf ...

  9. 使用IDEA自动生成Java实体类

    在上一篇帖子里,我们已经通过idea连接上了数据库,这里,通过IDEA自带的功能来根据数据库字段生成POJO 1. 选中一张表,右键--->Scripted Extensions--->选 ...

  10. Javascript获取页面元素相对和绝对位置

    制作网页的过程中,你有时候需要知道某个元素在网页上的确切位置. 下面的教程总结了Javascript在网页定位方面的相关知识. 一.网页的大小和浏览器窗口的大小 首先,要明确两个基本概念. 一张网页的 ...