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;