最近在使用json的时候,报了下面的错误:
net.sf.ezmorph.bean.MorphDynaBean cannot be cast to java.lang.String
这种错误非常常见,因为json转化为javabean的时候,默认为MorphDynaBean类的。如下面的例子:
在json字符串转javabean时,一般的对象,可以直接转,如:一个学生类,属性有姓名、年龄等。

public class Student implements java.io.Serializable{
private static final long serialVersionUID = 1L;
private String sname;
private Integer age;
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}

由字符串转javabean时可以使用以下方法:

String str = "[{\"sname\":\"admin\",\"age\":20}]";
    ////接收{}对象,此处接收数组对象会有异常,故需要解决
if (str.indexOf("[") != -1) {
str = str.replace("[", "");
}
if (str.indexOf("]") != -1) {
str = str.replace("]", "");
}
JSONObject jobj = JSONObject.fromObject(str);
Student s = (Student) JSONObject.toBean(jobj,Student.class);

这样没有问题的,但是如果属性中含有复杂的类型,当其中属性有类似List, Map,ArrayList就不可以了。 会报错:MorphDynaBean cannot be cast to ******。在JSONObject.toBean的时候如果转换的类中有集合,可以先定义Map classMap = new HashMap();在classMap中put你要转换的类中的集合名,比如:classMap.put("teachers", Teacher.class);然后在toBean()的时候把参数加上,例如:Student student=(Student) JSONObject.toBean(str, Student.class, classMap);
下面举出一个小小的例子:

public class Student implements java.io.Serializable{
private static final long serialVersionUID = 1L;
private String sname;
private Integer age;
private List < String > courses;
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public List getCourses()
{
return courses;
}
public void setCourses(List courses)
{
this.courses = courses;
}
}

在转化的时候需要这样来写:

Map classMap = new HashMap();
classMap.put("courses",String.class);
Student student =( Student) JSONObject.toBean(str, Student.class, classMap);

json学习系列(5)-json错误解析net.sf.ezmorph.bean.MorphDynaBean cannot be cast to的更多相关文章

  1. json解析出现:java.lang.ClassCastException: net.sf.ezmorph.bean.MorphDynaBean cannot be cast to XXX

    感谢大佬:https://blog.csdn.net/one_ink/article/details/99817676 一.出错原因 当我们利用json解析中的toBean方法时,如果它的属性里面包含 ...

  2. JSON字符串转JavaBean,net.sf.ezmorph.bean.MorphDynaBean cannot be cast to ……

    在json字符串转java bean时,一般的对象,可以直接转,如:一个学生类,属性有姓名.年龄等 public class Student implements java.io.Serializab ...

  3. json 字符串包含数组转换为object对象是报异常java.lang.ClassCastException: net.sf.ezmorph.bean.MorphDynaBean cannot be cast to

    前台传到后台的json字符串 前台实现这种格式json字符串方式: function contentFun(){ respType = respTypeFun(); return "{\&q ...

  4. 【明哥报错簿】之json转换报错---net.sf.ezmorph.bean.MorphDynaBean cannot be cast to XXXDO

    简单的json和bean转换直接用: public static void main(String[] args) { String s = "{'request': [{'orderCod ...

  5. json学习系列(8)JSON与JAVA数据的相互转换实例

    一.完整案例 先定义一个java实体对象,如下: package com.pcitc.json.cnblog; /** * SimInfo实体对象 * * @Description * @author ...

  6. json学习系列(7)JSONBuilder的用法

    JSONBuilder可以向文件中写入写入json字符串.如下面的例子: public class Test { public static void main(String args[]) thro ...

  7. json学习系列(6)JSONObject和JSONArray是JDK的集合部分延伸

    我一直觉得JSONObject和JSONArray是JDK集合部分的延伸,它们与JDK的List和Map一脉相承.通过研究JSONObject和JSONArray的结构,我们顺便也复习一下JDK的内容 ...

  8. json学习系列(3)-JSONObject的过滤设置

    我们通常对一个json串和java对象进行互转时,经常会有选择性的过滤掉一些属性值.例如下面的实体类: package com.pcitc.json; /** * Person实体类 * * @Des ...

  9. json学习系列(2)-生成JSONObject的方法

    生成JSONObject一般有两种方式,通过javabean或者map类型来生成.如下面的例子: 先定义一个User实体类: package com.pcitc.json; /** * 用户实体类 * ...

随机推荐

  1. memcached工作原理

    1.Memcached处理的原子是每一个(key,value)对(以下简称kv对),key会通过一个hash算法转化成hash-key,便于查找.对比以及做到尽可能的散列.同时,memcached用的 ...

  2. docker commit容器

    docker commit 容器ID 镜象REPOSITORY 镜象TAG 如docker commit 52b41c68ac7b registry.lenovows.com:5000/video-a ...

  3. Sql存储过程分页--临时表存储

    set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go -- ============================================= -- Au ...

  4. sql中文字符串获取拼音首字母

    SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO )) ) as begin ),) set @PY='' begin ) --如果非汉字字符,返回原字 ...

  5. Python获取目录、文件的注意事项

    Python获取指定路径下的子目录和文件有两种方法: os.listdir(dir)和os.walk(dir),前者列出dir目录下的所有直接子目录和文件的名称(均不包含完整路径),如 >> ...

  6. asp.net动态输出透明gif图片

    要使用asp.net动态输出透明gif图片,也就是用Response.ContentType = "image/GIF". 查了国内几个中文资料都没解决,最后是在一个英文博客上找到 ...

  7. window.parent与window.openner 之前的总结

    今天总结一下js中几个对象的区别和用法: 1.首先来说说 parent.window与top.window的用法 "window.location.href","loca ...

  8. x:Name标记特性与Name属性

    本文转载自silvergingko的专栏 在Xaml中定义了一个元素后,如果后面要使用该元素,则必须为该元素定义一个元素名称,在随后的Xaml中,通过元素名称来使用该元素. 在Xaml中,元素的名称定 ...

  9. wsp反编译

    最后出于好奇,我把wsp文件解压缩,看看里面是什么(如果您的机器上的压缩软件不能直接解压,可尝试修改后缀名为cab.).我看到的首先是一个清单文件(manifest.xml),一个DLL文件(Shar ...

  10. css行内样式

    <title>归园田居</title> </head> <body> <h2>归园田居</h2> <p>种豆南山下, ...