Json解析出错 :MorphDynaBean cannot be cast to

左手的ㄟ右手 2022-09-18 04:57 178阅读 0赞

在json字符串转java bean时,一般的对象,可以直接转,如:一个学生类,属性有姓名、年龄等;

但是如果属性中含有复杂的类型,当其中属性有类似List , Map ,ArrayList、自定义的类型,如List teachers, 就不可以了。 会报错:MorphDynaBean cannot be cast to con.test……

  1. JSONObject.toBean的时候如果转换的类中有集合,可以先定义Map<String, Class> classMap = new HashMap<String, Class>();在classMapput你要转换的类中的集合名,像:classMap.put("teachers", Teacher.class);然后在toBean()的时候把参数加上, 像:Student student=(Student) JSONObject.toBean(str, Student.class, classMap);
  2. private RSPerfData getRSPerfDataFromJSON(String jsonString) throws Exception{
  3. HashMap<String, Class> classMap = new HashMap<String, Class>();
  4. classMap.put("empDataData", RSEmpData.class);
  5. JSONObject jsonObject = JSONObject.fromObject(jsonString);
  6. WBQEncode_Decoder.my_decode_v2(jsonObject);
  7. RSPerfData rsPerfData = (RSPerfData) JSONObject.toBean(jsonObject, RSPerfData.class, classMap);
  8. return rsPerfData;
  9. }
  10. public class WBQEncode_Decoder
  11. {
  12. public static void my_decode_v2(Object object) throws Exception
  13. {
  14. if (object instanceof JSONObject)
  15. {// 是對象
  16. JSONObject jsonObject = (JSONObject) object;
  17. handleJsonObject(jsonObject);
  18. } else if (object instanceof JSONArray)
  19. {// 是對象
  20. JSONArray jsonArray = (JSONArray) object;
  21. int length = jsonArray.size();
  22. for (int i = 0; i < length; i++)
  23. {
  24. JSONObject jsonObject = (JSONObject) jsonArray.get(i);
  25. handleJsonObject(jsonObject);
  26. jsonArray.set(i, jsonObject);
  27. }
  28. }
  29. }
  30. public static void my_encode_v2(List<Map<String, Object>> list) throws IOException
  31. {
  32. if (list == null || list.isEmpty())
  33. {
  34. return;
  35. }
  36. for (Iterator<Map<String, Object>> iterator = list.iterator(); iterator.hasNext();)
  37. {
  38. Map<String, Object> map = iterator.next();
  39. Set<String> keys = map.keySet();
  40. for (Iterator<String> iterator2 = keys.iterator(); iterator2.hasNext();)
  41. {
  42. String key = iterator2.next();
  43. Object object = map.get(key);
  44. if (object == null || object instanceof String || object instanceof Number)
  45. {
  46. if (object == null)
  47. {
  48. object = "";
  49. }
  50. String value = object.toString();
  51. if (value.equals("null") || value.equals("undefined"))
  52. {
  53. value = "";
  54. }
  55. value = URLEncoder.encode(value, "utf-8");
  56. value = value.replaceAll("\\+", "百分之20(直接寫的話博客上看不到)");// 其實+號是URLEncoder.encode後把空格轉成+了,在頁面上解碼的時候是把空格當作了,所以要把+替換成
  57. map.put(key, value);
  58. }
  59. }
  60. }
  61. }
  62. @SuppressWarnings("unchecked")
  63. private static void handleJsonObject(JSONObject jsonObject) throws Exception
  64. {
  65. Set<String> keys = jsonObject.keySet();
  66. for (Iterator<String> iterator = keys.iterator(); iterator.hasNext();)
  67. {
  68. String key = iterator.next();
  69. String objectStr = jsonObject.get(key).toString();
  70. if ((objectStr.startsWith("{") && objectStr.endsWith("}")))
  71. {
  72. my_decode_v2(JSONObject.fromObject(objectStr));
  73. } else if (objectStr.startsWith("[") && objectStr.endsWith("]"))
  74. {
  75. JSONArray jay = JSONArray.fromObject(objectStr);
  76. my_decode_v2(jay);
  77. jsonObject.put(key, jay);
  78. } else
  79. {
  80. objectStr = URLDecoder.decode(objectStr, "utf-8");
  81. if (objectStr.equals("null") || objectStr.equals("undefined"))
  82. {
  83. objectStr = "";
  84. }
  85. objectStr = URLDecoder.decode(objectStr ,"utf-8");
  86. jsonObject.put(key, objectStr);
  87. }
  88. }
  89. }
  90. }

[ERROR]java.lang.NoSuchMethodException .()

有可能是你的转换的class非public。

发表评论

表情:
评论列表 (有 0 条评论,178人围观)

还没有评论,来说两句吧...

相关阅读