遇一山,过一山,处处有风景;只要勇敢向前,一路尽是繁花盛开。 | (点击查看→)【测试干货】python/java自动化、持续集成、性能、测开、简历、笔试面试等

jsonpath的使用(java:List<Object>转List<HashMap>)

要求及被测试字符串

练习1:从下面提取token

1
{"code":9420, "msg":"恭喜qzcsbj,登录成功","token":"538bbaba44be5d3d3856718e6c637d02"}

格式化

1
2
3
4
5
{
  "code": 9420,
  "msg": "恭喜qzcsbj,登录成功",
  "token": "538bbaba44be5d3d3856718e6c637d02"
}

  

练习2:从下面提取username是“韧”的phone

1
{"code":"0","msg":"sucess","data":[{"username":"韧","realname":"tester1","sex":"1","phone":"13800000001"},{"username":"全栈测试笔记","realname":"tester2","sex":"1","phone":"13800000002"}]}

格式化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
  "code": "0",
  "msg": "sucess",
  "data": [
    {
      "username": "韧",
      "realname": "tester1",
      "sex": "1",
      "phone": "13800000001"
    },
    {
      "username": "全栈测试笔记",
      "realname": "tester2",
      "sex": "1",
      "phone": "13800000002"
    }
  ]
}

 

依赖

1
2
3
4
5
6
<!-- https://mvnrepository.com/artifact/com.jayway.jsonpath/json-path -->
<dependency>
    <groupId>com.jayway.jsonpath</groupId>
    <artifactId>json-path</artifactId>
    <version>2.4.0</version>
</dependency>

 

实现

获取关联值:token

获取断言字段值:code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package com.qzcsbj;
 
import com.alibaba.fastjson.JSONObject;
import com.jayway.jsonpath.Configuration;
import com.jayway.jsonpath.JsonPath;
import java.util.HashMap;
import java.util.List;
 
/**
 * @公众号 : 全栈测试笔记
 * @博客 : www.cnblogs.com/uncleyong
 * @微信 : ren168632201
 * @描述 : <>
 */
public class Test {
    public static void main(String[] args) {
        String res = "{\"code\":9420, \"msg\":\"恭喜qzcsbj,登录成功\",\"token\":\"538bbaba44be5d3d3856718e6c637d02\"}";
        Object document = Configuration.defaultConfiguration().jsonProvider().parse(res);
        String token = JsonPath.read(document, "$.token");
        System.out.println("token: " + token);
 
        String res2 = "{\"code\":\"0\",\"msg\":\"sucess\",\"data\":[{\"username\":\"韧\",\"realname\":\"tester1\",\"sex\":\"1\",\"phone\":\"13800000001\"},{\"username\":\"全栈测试笔记\",\"realname\":\"tester2\",\"sex\":\"1\",\"phone\":\"13800000002\"}]}";
        Object document2 = Configuration.defaultConfiguration().jsonProvider().parse(res2);
        String phone = JsonPath.read(document2, "$.data[0].phone");
        System.out.println("phone: " + phone);
 
        List<Object> arr = JsonPath.read(document2, "$.data[*].phone");  // jsonpath不能写成:$.data[*].phone[?(@.username=='韧')]
        System.out.println("arr: " + arr.toString());
 
        List<Object> arr2 = JsonPath.read(document2, "$.data[*].['username','phone']");
        boolean flag = true;
        System.out.println("arr2: " + arr2.toString());
 
        List<HashMap> maps = JSONObject.parseArray(JSONObject.toJSONString(arr2),HashMap.class);  // 第一个参数也可以写为:arr2.toString();第二个参数是字节码,说明源码用到了反射
        for (HashMap map : maps) {
            if ("韧".equals(map.get("username"))){
                System.out.println(map.get("username")+"的phone是:" + map.get("phone"));
                flag = false;
                break;
            }
        }
 
        if (flag){
            System.out.println("未获取到【韧】的phone");
        }
 
    }
}

  

 

补充:

1
List<User> users = JSONObject.parseArray(parameters, User.class);

参考:https://www.cnblogs.com/uncleyong/p/16683578.html

 

原文会持续更新,原文地址:https://www.cnblogs.com/uncleyong/p/16676791.html

 

posted @   全栈测试笔记  阅读(896)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
浏览器标题切换
浏览器标题切换end
点击右上角即可分享
微信分享提示