1. 转换
@Test
public void test() {
String text = "[ {\"code\":\"R001\",\"date\":1676703926184,\"id\":1001}," +
"{\"code\":\"R002\",\"date\":1676703926184,\"id\":1002} ]";
List<OrderDTO> orders = JSON.parseArray(text, OrderDTO.class);
}
2. 泛型类的实例化
2.1 JSON串 --> ResultDTO<OrderDTO>
@Test
public void test() {
ResultDTO<OrderDTO> resultDTO = new ResultDTO<>();
resultDTO.setSuccess(true);
resultDTO.setData(new OrderDTO(1001L, "R001", new Date()));
// 打印 json 串: JSON.toJSONString(resultDTO)
// {"data":{"code":"R001","date":1712648470496,"id":1001},"success":true}
ResultDTO<OrderDTO> result = JSON.parseObject(JSON.toJSONString(resultDTO), new TypeReference<ResultDTO<OrderDTO>>() {});
System.out.println(result);
}
@Data
public class ResultDTO<T> {
private T data;
private Boolean success;
}
@Data
@NoArgsConstructor
@AllArgsConstructor
public class OrderDTO {
private Long id;
private String code;
private Date date;
}
2.2 JSON串 --> ResultDO<List<BaseUserDO>>
@Test
public void joiner() {
String text = "{\"module\":[null],\"success\":true}";
ResultDO<List<BaseUserDO>> userInfoResult = JSON.parseObject(text,
new TypeReference<ResultDO<List<BaseUserDO>>>(){});
System.out.println(userInfoResult);
List<BaseUserDO> module = userInfoResult.getModule();
BaseUserDO baseUserDO = module.get(0);
// 此时 baseUserDO = null, baseUserDO.getUserId() 会报NPE
System.out.println(baseUserDO.getUserId());
}
模型
@Data
public class ResultDO<T> implements Serializable {
private static final long serialVersionUID = 693234701969300224L;
private Boolean success;
private String trace;
private String errorCode;
private String errorMessage;
private T module;
@Override
public String toString() {
return "ResultDO{success=" + this.success + ", trace='" + this.trace + "'" + ", module=" + this.module + '}';
}
}
@Data
public class BaseUserDO implements Serializable {
private static final long serialVersionUID = 3715835354206806065L;
protected String id;
protected Long userId;
protected String nick;
protected String email;
protected String loginId;
protected Date lastVisit;
}
3. Map 类型
3.1 JSON串 --> Map<String, Object>
@Test
public void test() {
String text = "{" +
" \"001\": {" +
" \"id\": 1001," +
" \"code\": \"T001\"" +
" }," +
" \"002\": {" +
" \"id\": 1002," +
" \"code\": \"T002\"" +
" }" +
"}";
/*
* TypeReference 构造方法是 protected,所以使用它的子类 (用匿名内部类作为TypeReference子类)
* TypeReference<Map<String, OrderDTO>> typeReference = new TypeReference<Map<String, OrderDTO>>() {};
*
* 匿名内部类
* 语法: new 父类() { 子类内容 };
*/
Map<String, OrderDTO> result = JSON.parseObject(text, new TypeReference<Map<String, OrderDTO>>() {});
System.out.println(result);
}
3.2 JSON串 --> Map<String, List<Object>>
@Test
public void test() {
String text = "{" +
" \"2024001\": [" +
" {" +
" \"id\": 1001," +
" \"code\": \"T001\"" +
" }" +
" ]," +
" \"2024002\": [\n" +
" {\n" +
" \"id\": 1002," +
" \"code\": \"T002\"" +
" }" +
" ]" +
"}";
Map<Integer, List<OrderDTO>> map = JSON.parseObject(text, new TypeReference<Map<Integer, List<OrderDTO>>>() {});
System.out.println(map);
}
网友评论