请教下-解析嵌套 json

2023-04-11 11:37:39 +08:00
 fenglangjuxu

自己倒腾代码,发现了这个需求,请各位大神不吝赐教: 不同场景 data 的数据类型不一样,所以需要根据入参的类型 resultType,解析 json(现在的入参是 AccountingResponse 有可能别的地方入参就是 FreezingResponse) 用 hutool 的 JSONUtil 或者 fastjson

多谢了~


  public static void main(String[] args) throws Exception {

            String jsonStr = "{\"code\":\"00000\",\"data\":{\"orderNo\":\"1681177011860111\",\"transType\":\"REAlTIME\",\"errorMessage\":\"successful\",\"errorCode\":\"00000\",\"accountingTime\":\"2023-04-11T09:36:51.879\",\"status\":\"SUCCESS\"},\"message\":\"SUCCESSFUL\"}";
            BaseResponse<AccountingResponse> response = JSON.parseObject(jsonStr, new TypeReference<BaseResponse<AccountingResponse>>(){});
            System.out.println(response.getData().getStatus());


        BaseResponse<AccountingResponse> responseBaseResponse =  gogogogo(AccountingResponse.class, jsonStr);
        System.out.println(responseBaseResponse.getData().getOrderNo());
    }

   
    static public <R> BaseResponse<R> gogogogo(Class<R> resultType, String jsonStr) throws Exception {
        BaseResponse<R> resultObject= null;
        resultObject = JSON.parseObject(jsonStr, new TypeReference<BaseResponse<R>>(){});
        System.out.println(resultObject.getData());
       // TypeToken<?> type1 = TypeToken.getParameterized(BaseResponse.class,resultType);
        resultObject = JSON.parseObject(jsonStr, new TypeReference<BaseResponse<R>>(){});
        //!!!!! 这里出错
        System.out.println(resultObject.getData().getOrderNo());
        return resultObject;
    }
    
public class AccountingResponse implements Serializable {

    /**
     * 订单编号
     */
    public String orderNo;

    /**
     * 记账类型
     */
    public String transType;

    /**
     * 记账状态
     */
    public String status;

    public String getOrderNo() {
        return orderNo;
    }

    public void setOrderNo(String orderNo) {
        this.orderNo = orderNo;
    }

    public String getTransType() {
        return transType;
    }

    public void setTransType(String transType) {
        this.transType = transType;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }
}
public class BaseResponse<DATA>  implements Serializable {

    //响应码
    private String code;
    //响应码对应的内容
    private String message;
    private DATA data;

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public DATA getData() {
        return data;
    }

    public void setData(DATA data) {
        this.data = data;
    }



    public static BaseResponse<String> success(String code, String message) {
        BaseResponse res = new BaseResponse();
        res.setCode(code);
        res.setMessage(message);
        return res;
    }


    public static BaseResponse<String> fail(String code) {
        return of(code, null);
    }


    public static BaseResponse<String> fail(String code, String message) {
        BaseResponse res = new BaseResponse();
        res.setCode(code);
        res.setMessage(message);
        return res;
    }

    public static <T> BaseResponse<T> of(String errCode, T data) {
        BaseResponse<T> res = new BaseResponse<T>();
        res.setCode(errCode.getCode());
        res.setMessage(errCode.getMessage());
        res.setData(data);
        return res;
    }

    public static <T> BaseResponse<T> of(String code, String message, T data) {
        BaseResponse<T> res = new BaseResponse<T>();
        res.setCode(code);
        res.setMessage(message);
        res.setData(data);
        return res;
    }


}
953 次点击
所在节点    Java
1 条回复
issakchill
2023-04-11 14:26:22 +08:00
fastjson 我记得可以根据某个字段反序列 支持泛型的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/931506

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX