JsonPath如何获取JSON数据中的值
场景: 发送接口请求后,得到请求结果值是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[]);
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如何获取JSON数据中的值的更多相关文章
- Java如何获取JSON数据中的值
场景:在接口自动化场景中,下个接口发送的请求参数,依赖上个接口请求结果中的值.需要将获取值作为全局参数引用. import java.io.File; import java.io.FileInput ...
- js 获取json串中的值
用js中著名的eval函数var strJSON = "{name:'json name'}";//得到的JSONvar obj = eval( "(" + s ...
- java获取json格式中的值
先右键项目,然后点击properties,然后选中java Builder Path,选择add external jars,引入需要引入json.jar package web; import or ...
- C#调用接口返回json数据中含有双引号 或其他非法字符的解决办法
这几天,调用别人接口返回json数据含有特殊符号(双引号),当转换成json对象总是报错, json字符格式如下 { "BOXINFO":[ { ", "ITE ...
- ajax获取json数据为undefined--原因解析
解决办法:var dataObj=eval("("+data+")");//转换为json对象 问题: 1. 碰到一个问题ajax成功获取json数据后,取值显 ...
- 获取JSON对象的属性值
1.问题背景 有一个json对象,其中有键值对,那怎样获取json对象中属性值 2.实现源码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 ...
- mysql json_extract函数获取json字段中某个key的值
参考:https://www.cnblogs.com/chuanzhang053/p/9139624.html json_extract函数可以获取json对象中指定key的值,用法:json_ext ...
- Netflix Falcor获取JSON数据
Netflix开源了JavaScript库Falcor,它为从多个来源获取JSON数据提供了模型和异步机制. Netflix利用Falcor库实现通过JSON数据填充他们网页应用的用户界面.所有来自内 ...
- jquery通过ajax方法获取json数据不执行success
1.jquery通过ajax方法获取json数据不执行success回调 问题描述:jquery通过ajax方法获取json数据不执行success回调方法 问题原因:json格式存在问题或不符合标准 ...
随机推荐
- 我的pwn笔记
0.64位程序参数一次保存在RDI,RSI,RDX,RCX,R8和 R9,具体见图 windows64位调用约定 1.<_libc_csu_init>有一些万能gadget,汇编如下 #! ...
- DataStructure-链表实现指数非递减一元多项式的求和
// 2-链表实现多项式的求和.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<stdio.h> #inclu ...
- rsyslog磁盘辅助(Disk-Assisted)模式踩坑记
最近公司为方便tracing.排查, 搞全链路日志收集,而我手上的10亿+pv的动态前端服务必然在考虑之列. 之前呢. 都是运维定制的收集方式: 如上图,rsyslog push kafka, 优点嘛 ...
- vue路由守卫(全局守卫)
router.beforeEach((to,from,next)=>{}) 回调函数中的参数, to:进入到哪个路由去, from:从哪个路由离开, next:函数,决定是否展示你要看到的路由页 ...
- Mysql基本架构及查询流程
mysql体系结构简单概述: Connectors:接入方,支持协议很多 Management Serveices & Utilities:系统管理和控制工具例如:备份恢复,mysql复制集群 ...
- pta总结1
7-1 打印沙漏 (20 分) 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个"*",要求按下列格式打印 所谓"沙漏形状",是指每行输出奇数个符 ...
- openKM部署二次开发,eclipse环境
1.下载openKM_install_forwin安装包,配置jdk环境,start openKM,访问localhost\OpenKM,用户:okmAdmin 密码:admin.查看是否启动成功.安 ...
- Python-uiautomator使用说明文档
https://github.com/xiaocong/uiautomator 这个Python库是基于Android自带的uiautomator测试框架的一个python封包.适用于Android ...
- 异常之Tomcat8
在部署新项目后,启动tomcat突然报出如下错误: 问题:Publishing failed Could not publish to the server. Cannot acquire J2EEF ...
- 把.Net开发环境迁移到Linux上去
.Net Core发布之前,多年来,.Net程序员的开发环境都在Windows上. 三街第一帅的我,虽然上班的8小时一直在windows上撸C#,但是下班时间一般都在搞其他的乱七八糟的东西,比如写写小 ...