`
pdw2009
  • 浏览: 20499 次
社区版块
存档分类
最新评论

一个json-lib.jar转换复杂对象的问题?

    博客分类:
  • java
阅读更多
相关的bean如下
TVO.java代码如下
package demo;

import java.util.*;

import com.easylotto.lottobar.bean.BaseEntity;
import com.easylotto.lottobar.bean.ReqCommandVO;

public class TVO extends BaseEntity{
	private String tname;
	private List<Person> rcvoList;
	private Map map;
	
	public List<Person> getRcvoList() {
		return rcvoList;
	}

	public void setRcvoList(List<Person> rcvoList) {
		this.rcvoList = rcvoList;
	}

	public String getTname() {
		return tname;
	}

	public void setTname(String tname) {
		this.tname = tname;
	}
	

	public Map getMap() {
		return map;
	}

	public void setMap(Map map) {
		this.map = map;
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

	}

}


Person.java如下
package demo;

public class Person {
	private String name;
	private String age;
	
	public Person(String name,String age){
		this.name=name;
		this.age=age;
	}
	public String getAge() {
		return age;
	}
	public void setAge(String age) {
		this.age = age;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
}



测试类如下:
package demo;

import net.sf.json.*;
import java.util.*;

import com.easylotto.lottobar.bean.ReqCommandVO;
import com.easylotto.lottobar.bean.SocketCommandEntity;

/**
 * Json使用测试类
 * @author peidw 
 *
 */
public class JsonDemo {
	
	public String JsonStr2Object(){
		String str="{'map':{'a2':'A2','a1':'A1'},'rcvoList':[{'age':'20','name':'小裴'},{'age':'58','name':'小庞'}],'tname':'xxname'}";
		JSONObject jo=JSONObject.fromObject(str);
		TVO sce=null;
		if(jo!=null){
			sce=(TVO)jo.toBean(jo, TVO.class);
			List alist=sce.getRcvoList();
			System.out.println(alist.size());
			Person rcvo=null;
			for(int i=0;i<alist.size();i++){
				rcvo=(Person)alist.get(i);
				System.out.print(rcvo.getName()+"-"+rcvo.getAge());
			}
		}


		return "测试";
	}
	
	public void Object2JsonStr(){

		TVO tvo=new TVO();
		tvo.setTname("xxname");
		List <Person>a=new ArrayList();
		a.add(new Person("小裴","20"));
		a.add(new Person("小庞","58"));
		tvo.setRcvoList(a);
		Map map=new HashMap();
		map.put("a1", "A1");
		map.put("a2", "A2");
		tvo.setMap(map);
		JSONObject jo=JSONObject.fromObject(tvo);
		System.out.println(jo);
	}
	
	public static void main(String[] args){
		JsonDemo jd=new JsonDemo();
		jd.JsonStr2Object();
		//jd.Object2JsonStr();
	}
}



出现的异常如下
2
Exception in thread "main" java.lang.ClassCastException: net.sf.ezmorph.bean.MorphDynaBean
at demo.JsonDemo.JsonStr2Object(JsonDemo.java:26)
at demo.JsonDemo.main(JsonDemo.java:53)
使用的是json-lib-2.2.1-jdk15.jar包,请问这是怎么回事,怎么解决?
分享到:
评论
1 楼 anweixiao 2008-03-07  
这个问题有两个地方值得考虑:
1、一个就是json-lib好像是使用反射实现的,那你的Person类如果没有无参数的构造方法的话,很危险;
2、在你的转化的代码上并没有告诉程序把rcvoList里的数据为何种类型

为此正确的做法是,为Person添加无参数的构造方法,同时修改代码为:

if(jo!=null){ 
             Map<String, Class> m = new HashMap<String, Class>();
             m.put("rcvoList", Person.class);
             sce=(TVO)JSONObject.toBean(jo, TVO.class, m);

这样应该就OK了…………

相关推荐

    json-lib-2.4-jdk15.jar下载

    5. 无依赖:json-lib是一个独立的jar包,无任何第三方依赖,体积小,易于在项目中使用。 6. 高性能:json-lib的性能表现不错,可以满足大多数项目的要求,适合在Android和服务器端使用。 7. 与GWT无缝集成:js

    java+json转换包(json-lib-2.4-jdk15.jar,ezmorph-1.0.6.jar等)

    javajson转换包(json-lib-2.4-jdk15.jar,ezmorph-1.0.6.jar,commons-logging-1.1.jar,commons-lang-2.2.jar,commons-httpclient-3.1.jar,commons-digester.jar,commons-collections-3.2.jar,commons-beanutils-...

    jackson-all.jar

    (2)相比json-lib框架,Jackson所依赖的jar包较少,只需下载:jackson-all-1.6.*.jar ~ jackson-all-1.8.0.jar 任何一个。 (3)转换效率:jackson &gt; Gson &gt; JSON-lib (4)简单易用并且性能也要相对高些。 (5)Jackson社区...

    json lib 2.4的jar包(含所有依赖包)

    完整json lib 2.4的jar包,包括: commons-beanutils-1.9.3.jar commons-collections-3.2.jar commons-lang-2.3.jar ...Java开发中对象转换json需要,比json.jar好用,比如JSONArray多了fromObject函数等

    json-lib-2.3.jar

    解决JsonObject.fromObject方法,和转换List,String&gt;&gt; 型数据的JsonArray.fromObject()方法

    json-lib-2.4和相应的依赖包

    json-lib-2.4版本全套相应的依赖jar包,java转换json,页面传值必备神器

    json-lib-2.4-jdk15包及其依赖包

    json-lib-2.4-jdk 15及其全部依赖jar包 commons-beanutils-1.8.0.jar、commons-collections-3.2.1.jar、commons-lang-2.6.jar、commons-logging-1.1.1.jar、ezmorph-1.0.6.jar、json-lib-2.4-jdk15.jar

    JSON 字符串 与 java 对象的转换

    JSON 字符串 与 java 对象的转换 包括说明代码和需要的jar包 commons-beanutils-1.7.0.jar commons-lang-2.1.jar ezmorph-1.0.2.jar json-lib-1.1-jdk15.jar 之前找了一些,说是只需要引入json-lib-1.1-jdk15.jar...

    Json-lib 是一个 Java 类库

    Json-lib 是一个 Java 类库(官网:http://json-lib.sourceforge.net/)可以实现如下功能: •转换 javabeans, maps, collections, java arrays 和 XML 成为 json 格式数据 •转换 json 格式数据成为 javabeans ...

    json-lib2.4所需要的6个jar包

    java对象和json字符串转换所需的6个jar包,包括 commons-beanutils-1.8.0.jar, commons-collections-3.2.1.jar, commons-lang-2.4.jar, commons-logging.jar, ezmorph-1.0.6.jar, json-lib-2.4-jdk15.jar

    jackson-databind-2.11.4.jar

    Java下常见的Json类库有Gson、JSON-lib和Jackson等,Jackson相对来说比较高效,在项目中主要使用Jackson进行JSON和Java对象转换

    最新版fastjson-2.0.4.jar

    最新版fastjson-2.0.4.jar,阿里巴巴旗下现最流行的json转换工具包。详细操作使用,请参考我的文章链接:https://blog.csdn.net/qq_45978154/article/details/125004445?spm=1001.2014.3001.5502

    json-lib-2.4-jdk15及其依赖jar包

    能够帮助大家在java类实现json字符串与java对象间的转换

    jackson-databind-2.10.5.jar

    Java下常见的Json类库有Gson、JSON-lib和Jackson等,Jackson相对来说比较高效,在项目中主要使用Jackson进行JSON和Java对象转换

    json-lib所用的jar包

    主要是在将对象转换成JSON格式时,以便更好的将其传送到前台

    Java开发,JSON需要的jar

    JAVA 开发,JSON转换需要的jar,有两个json包,json-lib-2.4-jdk15.jar和json-20170516.jar,以及几个json架包需要的jar包

    Java转换Json需要的Jar包集合

    Java转换Json需要一些第三方的jar包支持,从自己做的项目中整理出来并贴于此 包含 1.commons-beanutils.jar 2.commons-collections-3.2.1.jar 3.commons-httpclient-3.0.jar 4.commons-lang-2.4.jar 5.commons-...

    json,xstream,ezmorph jar包

    //extjs的jsp标签库及使用实例 ...json-lib-2.2.3-jdk15.jar json-lib-2.2.3-jdk15-javadoc.jar commons-collections-3.2.jar commons-lang-2.3.jar //java将数据类型转为xml格式 xstream-1.3.1.jar

    【精】JSON需要的所有jar包

    (2)ezmorph是一个简单的java类库,用于将一种bean转换成另外一种bean。其动态bean的实现依赖于commons-beanutils包。ezmorph可以在这个地方下载源码:http://sourceforge.net/projects/ezmorph/files/ezmorph/ (3...

    fastjson-1.2.75.jar包

    Fastjson 是一个 Java 库,可以将 Java 对象转换为 JSON 格式,当然它也可以将 JSON 字符串转换为 Java 对象。 Fastjson 可以操作任何 Java 对象,即使是一些预先存在的没有源码的对象。

Global site tag (gtag.js) - Google Analytics