约定
1、涉及到的 json 格式
// data 为 object 的情况 {"code":0,"msg":"success","data":{}} // data 为 array 的情况 {"code":0,"msg":"success","data":[]}
2、假定第一种的对应的Java类型为 Result<XXX> ,第二种为 Result<List<XXX>>
代码汇总
utils/gson/ParameterizedTypeImpl.java
package utils.gson; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; public class ParameterizedTypeImpl implements ParameterizedType { private final Class raw; private final Type[] args; public ParameterizedTypeImpl(Class raw, Type[] args) { this.raw = raw; this.args = args != null ? args : new Type[0]; } @Override public Type[] getActualTypeArguments() { return args; } @Override public Type getRawType() { return raw; } @Override public Type getOwnerType() { return null; } }
utils/gson/Result.java
package utils.gson; public class Result<T> { private int code = 0; private String msg = ""; private String debug_msg = ""; private T data = null; public static Result Create() { return new Result(); } public int getCode() { return code; } public void setCode(int code) { this.code = code; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public T getData() { return data; } public void setData(T data) { this.data = data; } public String getDebug_msg() { return debug_msg; } public void setDebug_msg(String debug_msg) { this.debug_msg = debug_msg; } }
utils/gson/GsonUtils.java
package utils.gson; import com.google.gson.Gson; import java.lang.reflect.Type; import java.util.List; public class GsonUtils { private static Gson GSON = new Gson(); public static <T> Result<T> fromJsonObject(String reader, Class<T> clazz) { Type type = new ParameterizedTypeImpl(Result.class, new Class[]{clazz}); return GSON.fromJson(reader, type); } public static <T> Result<List<T>> fromJsonArray(String reader, Class<T> clazz) { // 生成List<T> 中的 List<T> Type listType = new ParameterizedTypeImpl(List.class, new Class[]{clazz}); // 根据List<T>生成完整的Result<List<T>> Type type = new ParameterizedTypeImpl(Result.class, new Type[]{listType}); return GSON.fromJson(reader, type); } }
test/Test.java
public class Test { public static void main(String[] args) { String str = "{\"code\":0,\"msg\":\"\",\"data\":[{\"ModifyIp\":\"172.16.66.59\",\"ModifyTime\":\"2018-06-14 10:22:59\",\"DeviceGroupUID\":\"12086366-FB5B-E30E-1689-DBA29B663C4B\",\"DeviceUID\":\"63D6DA46-148F-0DBB-9634-22B0D93078B6\",\"DeviceGroupName\":\"深圳市xxx科技有限公司\",\"Description\":\"\",\"IsEnabled\":\"1\",\"DelFlag\":\"0\",\"CreateIP\":\"172.16.66.59\",\"CreateTime\":\"2018-06-14 10:22:59\",\"UID\":\"95B591CA-24F2-B7A1-4E3C-25031CC3F5A8\",\"ApplicationID\":\"6AEC4B81-A046-E5E0-52FD-4B3AA185F593\",\"DeviceType\":\"GX\",\"DeviceSN\":\"972291000061\",\"DeviceTimeZone\":\"E8\",\"CarSeriesCode\":null,\"DeviceStatus\":\"2\",\"CarType\":null,\"DeviceVersion\":null,\"DeviceKey\":\"3d003600055136343836313600000000\",\"DeviceInfo\":\"\",\"DeviceIMEI\":null,\"SIMSN\":null,\"AppKey\":null,\"Delisting\":null,\"ServiceStartTime\":\"2018-06-14 11:10:25\",\"ServiceEndTime\":\"0000-00-00 00:00:00\"}]}"; try { Result<List<Device>> r3 = GsonUtils.fromJsonArray(str, Device.class); List<Device> devList = r3.getData(); for (Device device : devList) { System.out.println(device.getDeviceGroupName()); } } catch (Exception e) { System.out.println(str); } } }