一.起因
平常开发中经常碰到调用其他接口并返回数据我们要去解析返回的Body可以直接通过一个工具类处理写入到实体类中,百度了一波获取的原文只有解析单层json数据,所以在大佬的基础下写了个工具类
参考原文:参考文章地址
二.上代码
1.引入Jar包
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.76</version>
</dependency>
2.先加入几个实体类
/**
* 公共返回实体类
* @param <T>
*/
@Data
public class Result<T> {
private int ret;
private String msg;
private T data;
}
实体类Item
@Data
public class Item {
private String name;
private String value;
}
实体类Cat
@Data
public class Cat {
private String name;
}
三.工具类
package com.example.school.lx;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.util.ParameterizedTypeImpl;
import com.example.school.entity.Cat;
import com.example.school.entity.Item;
import java.lang.reflect.Type;
import java.util.List;
/**
* @author xinlan
* @version 1.0
* @date 2021/6/6 20:45
*/
public class JsonUtils {
private static <T> Result<List<T>> parseListResult(String json) {
return JSONObject.parseObject(json, buildType(Result.class, List.class, Item.class));
}
private static Type buildType(Type... types) {
ParameterizedTypeImpl beforeType = null;
if (types != null && types.length > 0) {
for (int i = types.length - 1; i > 0; i--) {
beforeType = new ParameterizedTypeImpl(new Type[]{beforeType == null ? types[i] : beforeType}, null, types[i - 1]);
}
}
return beforeType;
}
public static <T> T jsongData(String jsonString,Class<T> tClass){
return JSONObject.parseObject(jsonString,buildType(tClass,tClass));
}
public static <T> List<T> jsonList(String jsonString,Class<T> tClass){
return JSONObject.parseObject(jsonString,buildType(List.class,tClass));
}
public static void main(String[] args) {
String json = "{\"name\":\"haha\"}";
Cat cat = jsongData(json,Cat.class);
System.out.println("cat = " + cat);
String a = "{\n" +
"\t\"data\":{\n" +
"\t\t\"name\":\"username\",\n" +
"\t\t\"value\":\"root\"\n" +
"\t},\n" +
"\t\"msg\":\"Success\",\n" +
"\t\"ret\":0\n" +
"}";
Result<List<Item>> listResult = parseListResult(a);
System.out.println(listResult);
}
}
运行结果