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

一个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.jar

    JSON-lib.jar是Java平台上的一个库,用于处理JSON数据,特别适用于Java开发者在他们的应用程序中实现JSON的序列化和反序列化。 在Java中,处理JSON通常涉及两个主要任务:将Java对象转换为JSON字符串(序列化),...

    json-lib-2.1.jar和struts2-json-plugin-2.1.8.1.jar

    在Java世界里,`json-lib-2.1.jar` 是一个用于处理JSON的库,它提供了一系列的方法来将Java对象转换为JSON格式,以及将JSON字符串反序列化回Java对象。这个库支持多种Java类型,包括基本类型、集合、Map、自定义Java...

    基于json-lib.jar包 JSONObject-Java常用的四种用法

    `json-lib.jar`是一个流行的Java库,用于处理JSON格式的数据,它提供了丰富的API来操作JSON对象。本文将深入探讨基于`json-lib.jar`包中的`JSONObject`类的四种常用用法。 1. **创建JSONObject** 创建`JSONObject`...

    json-lib-2.3.jar

    json-lib-2.3.jar是这个库的一个版本,用于支持将Java对象转换成JSON格式和将JSON数据反序列化为Java对象。 标题中提到的"json-lib-2.3.jar"是json-lib库的一个具体实现,主要包含了一系列处理JSON的类和方法。这个...

    json-lib-2.4-jdk15.jar下载

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

    ezmorph-1.0.6.jar和json-lib-2.2.2-jdk15.rar

    ezmorph是一个Java库,提供了对象到对象的转换功能,而json-lib是另一个库,专门用于处理JSON(JavaScript Object Notation)数据格式。 1. **ezmorph库**: - **功能**:ezmorph库主要设计用于在Java中方便地进行...

    json-lib-2.4-jdk15.jar

    json-lib是一个Java库,它提供了一种方便的方式来序列化和反序列化Java对象为JSON格式,以及将JSON数据转换回Java对象。 json-lib-2.4-jdk15.jar是json-lib的一个特定版本,适用于JDK 1.5环境。这个版本的库包含了...

    JSON-lib包json-lib-0.8.jar和json-lib-0.9.jar包

    JSON-lib是一个Java库,用于将Java对象转换为JSON(JavaScript Object Notation)格式,以及将JSON数据转换回Java对象。这个库提供了多种方法来处理JSON数据,使得在Java应用程序中与JSON交互变得更加简单。JSON是一...

    json-lib.jar及其所有依赖包

    `json-lib.jar`是一个Java库,它提供了将Java对象转换为JSON格式以及将JSON字符串反序列化为Java对象的功能。 在描述中提到的`json-lib.jar`并不是一个独立的库,它依赖于其他几个Java库,这些依赖项也在提供的...

    struts-json-plugin-2.1.8.jar struts2-junit-plugin-2.1.8.jar json-lib-2.1.jar

    最后,`json-lib-2.1.jar`是针对Java的一个JSON库,它提供了一系列的JSON操作方法,如解析JSON字符串、生成JSON对象、转换JSON到Java对象等。在Struts2的JSON插件中,可能依赖于这个库来处理JSON数据的序列化和反...

    json-lib-2.2.3-jdk15.jar

    JSON-lib是一个Java库,它提供了将Java对象转换为JSON表示以及从JSON文本反序列化回Java对象的功能。该库名为`json-lib-2.2.3-jdk15.jar`,特别针对Java 1.5版本进行了优化。 JSON-lib的主要特点和功能包括: 1. *...

    json-lib-2.4-jdk15.jar所需全部JAR包_JSON_

    `json-lib`是一个Java库,它提供了一种将Java对象转换为JSON表示,以及将JSON内容反序列化回Java对象的机制。`json-lib-2.4-jdk15.jar`是该库的一个特定版本,适用于JDK 1.5环境。这个版本的jar文件包含了处理JSON...

    json-lib-2.4-jdk15.jar及其相关依赖

    `json-lib`是一个Java库,它提供了一种将Java对象转换为JSON表示,并将JSON数据转换回等效Java对象的方法。`json-lib-2.4-jdk15.jar`是这个库的一个特定版本,适用于JDK 1.5环境。 在Java开发中,`json-lib`库提供...

    json-lib应用所有jar

    JSON-lib是Java平台上的一个库,它提供了一种方便的方式来序列化和反序列化Java对象为JSON格式,以及从JSON字符串恢复Java对象。这个库在处理JSON数据时非常实用,特别是对于那些需要在服务器端和客户端之间进行数据...

    json-lib jar和所有依赖的jar

    `json-lib` 是一个Java库,它提供了一种将Java对象转换为JSON格式,以及从JSON数据还原Java对象的方法。在Java开发中,`json-lib` 被用作处理JSON的一种工具,特别是当项目中不使用或不方便使用如Gson、Jackson等...

    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-...

    json-lib-2.2.2-jdk15.jar

    json-lib-2.2.2-jdk15.jar是JSON库的一个版本,特别针对Java 1.5(JDK 1.5)进行了优化。这个压缩包包含了json-lib库的二进制文件,用于在Android和Java平台上解析和生成JSON数据。尽管这个版本是针对JDK 1.5,但...

    json-lib-2.4-jdk15-sources.jar

    总的来说,`json-lib-2.4-jdk15-sources.jar`为开发者提供了一个强大的工具,不仅能够方便地处理JSON数据,还通过源码开放了学习和定制的空间,对于提升Java Web开发技能大有裨益。通过研究这个库,我们可以更好地...

Global site tag (gtag.js) - Google Analytics