动力节点首页 全国咨询热线:400-8080-105

绑定手机号,登录
手机号

验证码

微信登录
手机号登录
手机号

验证码

30天自动登录
微信登录与注册
微信扫码登录与注册

扫码关注微信公众号完成登录与注册
手机号登录
首页 > 文章

JsonPath提取JSON数据中的值

07-29 12:35 320浏览
举报 T字号
  • 大字
  • 中字
  • 小字

场景: 发送接口请求后,得到请求结果值是Json数据, 需要从Json数据信息中提取字段值。

响应值字符与字符之间有空格,导致用正则表达式方法提取比较麻烦,于是用java的JsonPath方法提取快速方便好用,根据JSON路径去取。

Json数据: 需要提取FILE字段对应的值。

{
   "data" : {
      "testCaseData" : [
         {
            "agent_version" : "9.7.0.2225",
            "android_id" : "e3d699cf01620531",
            "asset_number" : "",
            "FILE" : "./ wwwccko(33)  .zip",
            "noncomp_reason" : "",
         },
         {
            "agent_version" : "2.0.0.1518",
            "android_id" : "",
            "asset_number" : "",
             "FILE" : "./XXXX(22)  .zip",
            "noncomp_reason" : "",
         }
      ],
      "total_count" : 2
   },
   "error_code" : 1,
   "message" : "Success",
   "timestamp" : 1504765848
}

解决方法:

package com.app.test;
import java.util.LinkedHashMap;
import net.minidev.json.JSONArray;
import com.jayway.jsonpath.JsonPath;
import com.jayway.jsonpath.Predicate;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
public class TestJsonPath {
    public static void main(String[] args) {
        String charset = "utf-8";
        File file = new File("D:\\Work_Report\\JSON2.txt");
        long fileByteLength = file.length();
        byte[] content = new byte[(int) fileByteLength];
        FileInputStream fileInputStream = null;
        try {
            fileInputStream = new FileInputStream(file);
            fileInputStream.read(content);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                fileInputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        String str = null;
        try {
            str = new String(content, charset);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        System.out.println(str);
        readjson(str, "$.data.testCaseData[0].FILE");
        System.out.println(readjson(str, "$.data.testCaseData[0].FILE"));
    }
    public static String readjson(String json, String jsonPath) {
        try {
            Object value = JsonPath.read(json, jsonPath, new Predicate[0]);
            if (value instanceof Integer) {
                return value.toString();
            } else if (value instanceof String) {
                return value.toString();
            } else if (value instanceof Boolean) {
                return value.toString();
            } else if (value instanceof JSONArray) {
                JSONArray arr = (JSONArray) value;
                if (!arr.isEmpty()) {
                    return arr.toJSONString();
                } else
                    return "";
            } else if (value instanceof LinkedHashMap) {
                return value.toString();
            } else if (value instanceof Float) {
                return value.toString();
            } else {
                return value.toString();
            }
        } catch (Exception e) {
            return "pathnotfound";
        }
    }
}

注: JsonPath固定语法: $.XX.XX[索引].对象key

依赖包

<dependency>
    <groupId>com.jayway.jsonpath</groupId>
    <artifactId>json-path</artifactId>
    <version>2.4.0</version>
</dependency>
String rep.jsonpath.result;
rep=repv.getResponseDataAsString();
jsonpath = "$.data.device[1].version
result = readjson(pre,jsonpath)
vars.put("XX",result)

工具类:

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.LinkedHashMap;
import net.minidev.json.JSONArray;
import com.jayway.jsonpath.JsonPath;
import com.jayway.jsonpath.Predicate;
public class Utils {
    public static String readJson(String filePath) {
        String charset = "utf-8";
        File file = new File(filePath);
        long fileByteLength = file.length();
        byte[] content = new byte[(int) fileByteLength];
        FileInputStream fileInputStream = null;
        try {
            fileInputStream = new FileInputStream(file);
            fileInputStream.read(content);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                fileInputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        String str = null;
        try {
            str = new String(content, charset);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return str;
    }
    public static String readjson(String json, String jsonPath) {
        try {
            Object value = JsonPath.read(json, jsonPath, new Predicate[0]);
            if (value instanceof Integer) {
                return value.toString();
            } else if (value instanceof String) {
                return value.toString();
            } else if (value instanceof Boolean) {
                return value.toString();
            } else if (value instanceof JSONArray) {
                JSONArray arr = (JSONArray) value;
                if (!arr.isEmpty()) {
                    return arr.toJSONString();
                } else
                    return "";
            } else if (value instanceof LinkedHashMap) {
                return value.toString();
            } else if (value instanceof Float) {
                return value.toString();
            } else {
                return value.toString();
            }
        } catch (Exception e) {
            return "pathnotfound";
        }
    }

}

动力节点在线课程涵盖零基础入门,高级进阶,在职提升三大主力内容,覆盖Java从入门到就业提升的全体系学习内容。全部Java视频教程免费观看,相关学习资料免费下载!对于火爆技术,每周一定时更新!如果想了解更多相关技术,可以到动力节点在线免费观看JSONPath视频教程哦!

0人推荐
共同学习,写下你的评论
0条评论
代码小兵286
程序员代码小兵286

45篇文章贡献179882字

相关课程 更多>

作者相关文章更多>

推荐相关文章更多>

Java初学者学习方法

代码小兵64503-29 11:46

两道经典算法问题

代码小兵51603-29 13:18

Java中模拟高并发的方法

代码小兵87208-06 11:36

Java程序员必备的一些流程图

代码小兵64503-29 15:27

Java接口限流的实现方法

代码小兵57603-29 17:52

发评论

举报

0/150

取消