JSON TypeReference 泛型数据处理

1. 转换

@Test
public void test() {
    String text = "[ {"code":"R001","date":1676703926184,"id":1001}," +
                    "{"code":"R002","date":1676703926184,"id":1002} ]";

    List orders = JSON.parseArray(text, OrderDTO.class);
}

2. 泛型类的实例化

2.1 JSON串 –> ResultDTO

@Test
public void test() {
    ResultDTO 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 result = JSON.parseObject(JSON.toJSONString(resultDTO), new TypeReference>() {});
    System.out.println(result);
}
@Data
public class ResultDTO {
    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>

@Test
public void joiner() {
   String text = "{"module":[null],"success":true}";
    ResultDO> userInfoResult = JSON.parseObject(text,
            new TypeReference>>(){});

    System.out.println(userInfoResult);

    List module = userInfoResult.getModule();
    BaseUserDO baseUserDO = module.get(0);
    // 此时 baseUserDO = null, baseUserDO.getUserId() 会报NPE
    System.out.println(baseUserDO.getUserId());
}

模型

@Data
public class ResultDO 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

@Test
public void test() {
    String text = "{" +
            "    "001": {" +
            "        "id": 1001," +
            "        "code": "T001"" +
            "    }," +
            "    "002": {" +
            "        "id": 1002," +
            "        "code": "T002"" +
            "    }" +
            "}";

    /*
    * TypeReference 构造方法是 protected,所以使用它的子类 (用匿名内部类作为TypeReference子类)
    * TypeReference> typeReference = new TypeReference>() {};
    * 
    * 匿名内部类
    * 语法: new 父类() { 子类内容 };
    */
    Map result = JSON.parseObject(text, new TypeReference>() {});

    System.out.println(result);
}

3.2 JSON串 –> Map>

@Test
public void test() {
    String text = "{" +
                "    "2024001": [" +
                "        {" +
                "            "id": 1001," +
                "            "code": "T001"" +
                "        }" +
                "    ]," +
                "    "2024002": [n" +
                "        {n" +
                "            "id": 1002," +
                "            "code": "T002"" +
                "        }" +
                "    ]" +
                "}";

    Map> map = JSON.parseObject(text, new TypeReference>>() {});
    System.out.println(map);
}

【信息由网络或者个人提供,如有涉及版权请联系COOY资源网邮箱处理】

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容