读取classes根目录下的config.json文件
1、添加pom依赖
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path</artifactId>
<version>2.2.0</version>
</dependency>
2、封装类
import com.jayway.jsonpath.Configuration;
import com.jayway.jsonpath.JsonPath;
import lombok.extern.slf4j.Slf4j;
import java.io.*;
import java.util.List;
@Slf4j
public class Config {
private static String fileContent;
private static Object document = null;
static {
try (InputStream in = Config.class.getResourceAsStream("/config.json")) {
fileContent = readStream(in);
document = Configuration.defaultConfiguration().jsonProvider().parse(fileContent);
} catch (IOException e) {
log.error(e.getMessage(), e);
}
}
private Config() {
}
/**
* @param pattern jsonpath<br/>
* 示例:<br/>
* $.store.book[*].author<br/>
* $.store.book[0].author
* @param <T>
* @return
*/
public static <T> T get(String pattern) {
return JsonPath.read(document, pattern);
}
/**
* 读取 InputStream 到 String字符串中
*/
private static String readStream(InputStream in) {
try {
//<1>创建字节数组输出流,用来输出读取到的内容
ByteArrayOutputStream baos = new ByteArrayOutputStream();
//<2>创建缓存大小
byte[] buffer = new byte[1024]; // 1KB
//每次读取到内容的长度
int len = -1;
//<3>开始读取输入流中的内容
while ((len = in.read(buffer)) != -1) { //当等于-1说明没有数据可以读取了
baos.write(buffer, 0, len); //把读取到的内容写到输出流中
}
//<4> 把字节数组转换为字符串
String content = baos.toString();
//<5>关闭输入流和输出流
in.close();
baos.close();
//<6>返回字符串结果
return content;
} catch (Exception e) {
e.printStackTrace();
return e.getMessage();
}
}
public static void main(String[] args) throws IOException {
String json = "{\n" +
" \"store\": {\n" +
" \"book\": [\n" +
" {\n" +
" \"category\": \"reference\",\n" +
" \"author\": \"NigelRees\",\n" +
" \"title\": \"SayingsoftheCentury\",\n" +
" \"price\": 8.95\n" +
" },\n" +
" {\n" +
" \"category\": \"fiction\",\n" +
" \"author\": \"EvelynWaugh\",\n" +
" \"title\": \"SwordofHonour\",\n" +
" \"price\": 12.99\n" +
" },\n" +
" {\n" +
" \"category\": \"fiction\",\n" +
" \"author\": \"HermanMelville\",\n" +
" \"title\": \"MobyDick\",\n" +
" \"isbn\": \"0-553-21311-3\",\n" +
" \"price\": 8.99\n" +
" },\n" +
" {\n" +
" \"category\": \"fiction\",\n" +
" \"author\": \"J.R.R.Tolkien\",\n" +
" \"title\": \"TheLordoftheRings\",\n" +
" \"isbn\": \"0-395-19395-8\",\n" +
" \"price\": 22.99\n" +
" }\n" +
" ],\n" +
" \"bicycle\": {\n" +
" \"color\": \"red\",\n" +
" \"price\": 19.95\n" +
" }\n" +
" },\n" +
" \"expensive\": 10\n" +
"}";
// 用法1
List<String> authors = JsonPath.read(json, "$.store.book[*].author");
System.out.println(authors);
// 用法2。如果你还想读取其他路径,现在上面不是很好的方法,因为他每次获取都需要再解析整个文档。所以,我们可以先解析整个文档,再选择调用路径。
Object document = Configuration.defaultConfiguration().jsonProvider().parse(json);
String author0 = JsonPath.read(document, "$.store.book[0].author");
String author1 = JsonPath.read(document, "$.store.book[1].author");
System.out.println(author0);
System.out.println(author1);
// 用法3。当在java中使用JsonPath时,重要的是要知道你在结果中期望什么类型。 JsonPath将自动尝试将结果转换为调用者预期的类型。
// 抛出 java.lang.ClassCastException 异常
// List<String> list = JsonPath.parse(json).read("$.store.book[0].author");
// 正常
// String author = JsonPath.parse(json).read("$.store.book[0].author");
// 用法4:默认情况下,MappingProvider SPI提供了一个简单的对象映射器。 这允许您指定所需的返回类型,MappingProvider将尝试执行映射。 在下面的示例中,演示了Long和Date之间的映射。
//
//String json = "{\"date_as_long\" : 1411455611975}";
//Date date = JsonPath.parse(json).read("$['date_as_long']", Date.class);
// (5)
// 如果您将JsonPath配置为使用JacksonMappingProvider或GsonMappingProvider,您甚至可以将JsonPath输出直接映射到POJO中。
// Book book = JsonPath.parse(json).read("$.store.book[0]", Book.class);
}
}
3、调用示例
String orgCode = Config.get("$.commandSys.rootDirectOrg.jz");
4、参考
jsonpath使用:http://www.ibloger.net/article/2329.html