91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

關于JSONArray轉換遇到的坑是怎么樣的

發布時間:2021-10-19 18:41:29 來源:億速云 閱讀:186 作者:柒染 欄目:大數據

本篇文章給大家分享的是有關關于JSONArray轉換遇到的坑是怎么樣的,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

先展示一段代碼:

List<DataRecoveryEnableDto> initList = initEnableRecoveryChoose(null);
if(CollectionUtils.isEmpty(initList)) return null;

String elistStr = JSONObject.toJSONString(initList);

net.sf.json.JSONArray jsonArray = JSONArray.fromObject(elistStr);
List<DataRecoveryEnableDto> enableChList = (List<DataRecoveryEnableDto>) jsonArray.toCollection(jsonArray, DataRecoveryEnableDto.class);

上面的代碼中,一開始的initList查詢出來的數據如圖:

關于JSONArray轉換遇到的坑是怎么樣的

但是經過轉換為json字符串,然后再轉換為List后發現對象里面的時間卻變成了當前時間:

關于JSONArray轉換遇到的坑是怎么樣的

說好的對象轉換呢?結果與想象總是有所差距

我們先查看轉換為json字符串后的內容:

查看串內容:

[{"fromNodeCode":"2","fromNodeName":"新增案件","ruleOrdinal":"18","toNodeCode":"2","toNodeName":"新增案件","transDate":1562601600000},{"fromNodeCode":"2","fromNodeName":"新增案件","ruleOrdinal":"24","toNodeCode":"3","toNodeName":"催收系統","transDate":1562601600000},{"fromNodeCode":"2","fromNodeName":"新增案件","ruleOrdinal":"22","toNodeCode":"4","toNodeName":"直催系統","transDate":1562601600000},{"fromNodeCode":"2","fromNodeName":"新增案件","ruleOrdinal":"23","toNodeCode":"4","toNodeName":"直催系統","transDate":1562601600000},{"fromNodeCode":"3","fromNodeName":"催收系統","ruleOrdinal":"21","toNodeCode":"4","toNodeName":"直催系統","transDate":1562601600000},{"fromNodeCode":"3","fromNodeName":"催收系統","ruleOrdinal":"12","toNodeCode":"5","toNodeName":"客戶管理系統","transDate":1562601600000},{"fromNodeCode":"4","fromNodeName":"直催系統","ruleOrdinal":"24","toNodeCode":"3","toNodeName":"催收系統","transDate":1562601600000},{"fromNodeCode":"4","fromNodeName":"直催系統","ruleOrdinal":"25","toNodeCode":"5","toNodeName":"客戶系統","transDate":1562601600000},{"fromNodeCode":"5","fromNodeName":"客戶系統","ruleOrdinal":"3","toNodeCode":"2","toNodeName":"新增案件","transDate":1562601600000},{"fromNodeCode":"2","fromNodeName":"新增案件","ruleOrdinal":"24","toNodeCode":"3","toNodeName":"快信系統","transDate":1562688000000}]

經過測試可以發現,在將List轉換為json字符串的時候,時間被轉換為了long類型,但經過轉換可以發現還是9日的時間:

關于JSONArray轉換遇到的坑是怎么樣的

查看jsonArray中的每個對象的時間:

關于JSONArray轉換遇到的坑是怎么樣的

如圖可以發現就是字符串對應的時間,所以到此處應該還是沒有問題的,可以斷定問題應該是出現在這一句:

List<DataRecoveryEnableDto> enableChList = (List<DataRecoveryEnableDto>) jsonArray.toCollection(jsonArray, DataRecoveryEnableDto.class);

通過跟進源碼可以發現應該是在這個方法里面進行的處理long類型為日期的:

關于JSONArray轉換遇到的坑是怎么樣的

關于JSONArray轉換遇到的坑是怎么樣的

繼續跟進可以發現,這個源碼里面是按照java.util.Date的類型進行了newInstance操作,也就是等價于new Date的操作

關于JSONArray轉換遇到的坑是怎么樣的

綜合上面可以發現,將String類型的json串轉換為List的時候,盡量不要使用如下方式,除非對日期沒有要求:

net.sf.json.JSONArray jsonArray = JSONArray.fromObject(elistStr);
List<DataRecoveryEnableDto> enableChList = (List<DataRecoveryEnableDto>) jsonArray.toCollection(jsonArray, DataRecoveryEnableDto.class);

添加測試代碼進行測試:

public static void main(String[] args) {
    long t1 = 1562601600000l;
    long t2 = 1562688000000l;
    List<DataRecoveryEnableDto> initList = new ArrayList<>();
    for(int i=0;i<8;i++){
        DataRecoveryEnableDto enableDto = new DataRecoveryEnableDto();
        enableDto.setFromNodeCode(i+"");
        enableDto.setToNodeCode((i+2)+"");
        enableDto.setTransDate(i%2==0?new Date(t1):new Date(t2));
        initList.add(enableDto);
    }

    String elistStr = JSONObject.toJSONString(initList);

    JSONArray array = JSONArray.parseArray(elistStr);
    List<DataRecoveryEnableDto> list = array.toJavaList(DataRecoveryEnableDto.class);
    List<DataRecoveryEnableDto> enableChList = (List<DataRecoveryEnableDto>)JSONObject.parseObject(elistStr,initList.getClass());
    list.stream().forEach(dto->{
        System.out.println(dto.getFromNodeCode()+"-"+dto.getToNodeCode()+"-"+dto.getTransDate());
    });
    System.out.println(JSONObject.toJSONString(list));
}

執行結果:關于JSONArray轉換遇到的坑是怎么樣的

如圖可以發現使用阿里巴巴的這種方式還是好使的:

String elistStr = JSONObject.toJSONString(initList);

JSONArray array = JSONArray.parseArray(elistStr);

List<DataRecoveryEnableDto> list = array.toJavaList(DataRecoveryEnableDto.class);

至此,希望可以幫助路過的友人!

以上就是關于JSONArray轉換遇到的坑是怎么樣的,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

凯里市| 河津市| 广州市| 河北省| 卢湾区| 四子王旗| 修水县| 西华县| 台前县| 工布江达县| 玉龙| 仁寿县| 峨眉山市| 娄底市| 桦甸市| 甘孜县| 喀喇沁旗| 哈巴河县| 灯塔市| 郓城县| 新宾| 鄂托克旗| 鄂伦春自治旗| 石门县| 壤塘县| 永仁县| 阳高县| 交口县| 云林县| 新晃| 桐柏县| 永春县| 建湖县| 包头市| 石林| 雷州市| 汉川市| 海门市| 沽源县| 旺苍县| 仪陇县|