【Json】JSONObejct格式转化问题

来源:互联网 发布:windows经典模式 编辑:程序博客网 时间:2024/06/06 01:25

1.问题:

为什么JSONObject类型不能转化为实体类对象?
Exception in thread “main” java.lang.ClassCastException: com.alibaba.fastjson.JSONObject cannot be cast to com.fxrj.email.model.EmailRecDecMesInfo

2.源代码:

     String json="fnSuc_getNews(        {"code":"S_OK",        "errorCode":"",        "summary":"",        "var":[{"corpId":1000,            "createTime":1498617027512,            "messageFrom":0,            "messageInfo":{"content":"你好"},            "userId":"yunya-guo"},            {"corpId":1000,            "createTime":1498617027522,            "messageFrom":3,            "messageInfo":{"content":"世界"},            "messageState":0,            "messageType":1,            "userId":"yunya-guo"}        ]})";     JSONObject jo= (JSONObject) JSON.parse(json);/*解析成doc格式*/        System.out.println("jo:"+jo);        JSONArray array=jo.getJSONArray("var");        List<EmailReceivedDetail> listEDetail=new ArrayList<>();        for (Object object:array.toArray()) {            EmailReceivedDetail erd = new EmailReceivedDetail();            JSONObject jsonObject=(JSONObject) object;            erd.setCorpId((Integer) jsonObject.get("corpId"));            erd.setCreateTime((Long) jsonObject.get("createTime"));            erd.setMessageFrom((Integer) jsonObject.get("messageFrom"));            erd.setMessageInfo(((EmailRecDecMesInfo) jsonObject.get("messageInfo")));            //System.out.println("messageInfo:");            erd.setMessageState((Integer) jsonObject.get("messageState"));            erd.setMessageType((Integer) jsonObject.get("messageType"));            erd.setUserId((String) jsonObject.get("userid"));        }    }

3.截图:

这里写图片描述

4.总结:

1、这里要明确,一层一层取的意义;
①jsonObject.get(“messageInfo”),这里取出来的是一个value,是通过key取得的值;
②(JSONObject)jsonObject.get(“messageInfo”)是把通过messageInfo这个key取出来的值,转化为JSONObject,即转化成json实体;
③((JSONObject)jsonObject.get(“messageInfo”)).get(“content”)是把原来第一层json对象的值,转化成json后,再通过key(“content”)获得其对应的值value;
④(String)((JSONObject)jsonObject.get(“messageInfo”)).get(“content”)把第二层json对象的值变成String类型,然后setContent;
这里写图片描述