转自:http://www.cnblogs.com/mailingfeng/archive/2012/01/18/2325707.html
package com.mai.json; import static org.junit.Assert.assertEquals; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import net.sf.ezmorph.Morpher; import net.sf.ezmorph.MorpherRegistry; import net.sf.ezmorph.bean.BeanMorpher; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import net.sf.json.util.JSONUtils; import org.apache.commons.beanutils.PropertyUtils; import org.junit.Test; public class JsonLibTest { /* * 普通类型、List、Collection等都是用JSONArray解析 * * Map、自定义类型是用JSONObject解析 * 可以将Map理解成一个对象,里面的key/value对可以理解成对象的属性/属性值 * 即{key1:value1,key2,value2......} * * 1.JSONObject是一个name:values集合,通过它的get(key)方法取得的是key后对应的value部分(字符串) * 通过它的getJSONObject(key)可以取到一个JSONObject,--> 转换成map, * 通过它的getJSONArray(key) 可以取到一个JSONArray , * * */ //一般数组转换成JSON @Test public void testArrayToJSON(){ boolean[] boolArray = new boolean[]{true,false,true}; JSONArray jsonArray = JSONArray.fromObject( boolArray ); System.out.println( jsonArray ); // prints [true,false,true] } //Collection对象转换成JSON @Test public void testListToJSON(){ List list = new ArrayList(); list.add( "first" ); list.add( "second" ); JSONArray jsonArray = JSONArray.fromObject( list ); System.out.println( jsonArray ); // prints ["first","second"] } //字符串json转换成json, 根据情况是用JSONArray或JSONObject @Test public void testJsonStrToJSON(){ JSONArray jsonArray = JSONArray.fromObject( "['json','is','easy']" ); System.out.println( jsonArray ); // prints ["json","is","easy"] } //Map转换成json, 是用jsonObject @Test public void testMapToJSON(){ Map map = new HashMap(); map.put( "name", "json" ); map.put( "bool", Boolean.TRUE ); map.put( "int", new Integer(1) ); map.put( "arr", new String[]{"a","b"} ); map.put( "func", "function(i){ return this.arr[i]; }" ); JSONObject jsonObject = JSONObject.fromObject( map ); System.out.println( jsonObject ); } //复合类型bean转成成json @Test public void testBeadToJSON(){ MyBean bean = new MyBean(); bean.setId("001"); bean.setName("银行卡"); bean.setDate(new Date()); List cardNum = new ArrayList(); cardNum.add("农行"); cardNum.add("工行"); cardNum.add("建行"); cardNum.add(new Person("test")); bean.setCardNum(cardNum); JSONObject jsonObject = JSONObject.fromObject(bean); System.out.println(jsonObject); } //普通类型的json转换成对象 @Test public void testJSONToObject() throws Exception{ String json = "{name=\"json\",bool:true,int:1,double:2.2,func:function(a){ return a; },array:[1,2]}"; JSONObject jsonObject = JSONObject.fromObject( json ); System.out.println(jsonObject); Object bean = JSONObject.toBean( jsonObject ); assertEquals( jsonObject.get( "name" ), PropertyUtils.getProperty( bean, "name" ) ); assertEquals( jsonObject.get( "bool" ), PropertyUtils.getProperty( bean, "bool" ) ); assertEquals( jsonObject.get( "int" ), PropertyUtils.getProperty( bean, "int" ) ); assertEquals( jsonObject.get( "double" ), PropertyUtils.getProperty( bean, "double" ) ); assertEquals( jsonObject.get( "func" ), PropertyUtils.getProperty( bean, "func" ) ); System.out.println(PropertyUtils.getProperty(bean, "name")); System.out.println(PropertyUtils.getProperty(bean, "bool")); System.out.println(PropertyUtils.getProperty(bean, "int")); System.out.println(PropertyUtils.getProperty(bean, "double")); System.out.println(PropertyUtils.getProperty(bean, "func")); System.out.println(PropertyUtils.getProperty(bean, "array")); List arrayList = (List)JSONArray.toCollection(jsonObject.getJSONArray("array")); for(Object object : arrayList){ System.out.println(object); } } //将json解析成复合类型对象, 包含List @Test public void testJSONToBeanHavaList(){ String json = "{list:[{name:'test1'},{name:'test2'}],map:{test1:{name:'test1'},test2:{name:'test2'}}}"; // String json = "{list:[{name:'test1'},{name:'test2'}]}"; Map classMap = new HashMap(); classMap.put("list", Person.class); MyBeanWithPerson diyBean = (MyBeanWithPerson)JSONObject.toBean(JSONObject.fromObject(json),MyBeanWithPerson.class , classMap); System.out.println(diyBean); List list = diyBean.getList(); for(Object o : list){ if(o instanceof Person){ Person p = (Person)o; System.out.println(p.getName()); } } } //将json解析成复合类型对象, 包含Map @Test public void testJSONToBeanHavaMap(){ //把Map看成一个对象 String json = "{list:[{name:'test1'},{name:'test2'}],map:{testOne:{name:'test1'},testTwo:{name:'test2'}}}"; Map classMap = new HashMap(); classMap.put("list", Person.class); classMap.put("map", Map.class); //使用暗示,直接将json解析为指定自定义对象,其中List完全解析,Map没有完全解析 MyBeanWithPerson diyBean = (MyBeanWithPerson)JSONObject.toBean(JSONObject.fromObject(json),MyBeanWithPerson.class , classMap); System.out.println(diyBean); System.out.println("do the list release"); List<Person> list = diyBean.getList(); for(Person o : list){ Person p = (Person)o; System.out.println(p.getName()); } System.out.println("do the map release"); //先往注册器中注册变换器,需要用到ezmorph包中的类 MorpherRegistry morpherRegistry = JSONUtils.getMorpherRegistry(); Morpher dynaMorpher = new BeanMorpher( Person.class, morpherRegistry); morpherRegistry.registerMorpher( dynaMorpher ); Map map = diyBean.getMap(); /*这里的map没进行类型暗示,故按默认的,里面存的为net.sf.ezmorph.bean.MorphDynaBean类型的对象*/ System.out.println(map); /*输出: {testOne=net.sf.ezmorph.bean.MorphDynaBean@f73c1[ {name=test1} ], testTwo=net.sf.ezmorph.bean.MorphDynaBean@186c6b2[ {name=test2} ]} */ List<Person> output = new ArrayList(); for( Iterator i = map.values().iterator(); i.hasNext(); ){ //使用注册器对指定DynaBean进行对象变换 output.add( (Person)morpherRegistry.morph( Person.class, i.next() ) ); } for(Person p : output){ System.out.println(p.getName()); /*输出: test1 test2 */ } } }
相关推荐
- 在进行对象到JSON转换时,可能会遇到类型不匹配、空指针等问题,需要妥善处理异常,如使用try-catch语句包裹转换代码,并进行适当的错误反馈。 通过以上步骤,我们能够理解如何使用json-lib库将Java对象转换成...
只需确保 Java 类型与 JSON 结构匹配,`json-lib` 就能正确地进行转换。 6. **处理日期和时间**: JSON 格式不直接支持日期和时间,但 `json-lib` 提供了对日期的处理,例如: ```java jsonSerializer....
1. 简单易用:json-lib的API简单易于使用,一般只需要一行或两行代码就可以完成Java对象和JSON的相互转换。 2. 支持对象图:可以将复杂的对象层次结构与JSON相互转换,支持List、Map、数组等类型。 3. 支持注解:支持@...
json-lib是一个Java库,它提供了一种方便的方式来序列化和反序列化Java对象为JSON格式,以及将JSON数据转换回Java对象。 json-lib-2.4-jdk15.jar是json-lib的一个特定版本,适用于JDK 1.5环境。这个版本的库包含了...
5. **XML与JSON互转**:JSON-lib还提供了XML和JSON之间的转换功能,这对于那些需要在XML和JSON间切换的应用非常有用。 综上所述,JSON-lib作为一个强大的Java JSON处理库,极大地简化了JSON在Java开发中的使用。...
总的来说,json-lib-2.4是Java开发中处理JSON数据的一个实用工具,尤其适用于需要在Java和JSON之间进行数据转换的项目。尽管现在有许多更新和更强大的JSON库,但json-lib-2.4的简单性和兼容性仍然使其在某些场景下...
在Java世界里,`json-lib-2.1.jar` 是一个用于处理JSON的库,它提供了一系列的方法来将Java对象转换为JSON格式,以及将JSON字符串反序列化回Java对象。这个库支持多种Java类型,包括基本类型、集合、Map、自定义Java...
1. **JSON转换**:`json-lib`提供了将Java对象如Map、List、自定义类等转换为JSON字符串的方法,同时也支持将JSON字符串解析为相应的Java对象。这在处理前后端交互或者存储和传输数据时非常有用。 2. **XML与JSON互...
JSON-lib是一个Java库,它提供了将Java对象转换为JSON表示以及从JSON文本反序列化回Java对象的功能。该库名为`json-lib-2.2.3-jdk15.jar`,特别针对Java 1.5版本进行了优化。 JSON-lib的主要特点和功能包括: 1. *...
在文件列表中的"jsonlib需要jar包",这可能是指包含了`json-lib`库及其所有依赖的JAR文件。在实际项目中,将这些JAR文件添加到项目的类路径(classpath)中,就可以使用`json-lib`提供的功能,而无需通过Maven或其他...
`json-lib-0.8.jar`是JSON-lib的0.8版本,它可能包含基础的JSON转换功能,如将Java对象转换为JSON字符串,以及反向操作,即将JSON字符串解析回Java对象。此外,它可能还支持JSON数组和JSON对象的创建、读取和修改。...
4. **JsonConfig**: 提供配置选项,可以定制JSON转换行为,如日期格式、null值处理等。 在实际开发中,使用json-lib进行JSON操作的步骤通常包括: 1. 导入json-lib库,如`import net.sf.json.JSONObject; import ...
json-lib-2.2.2-jdk15.jar是JSON库的一个版本,特别针对Java 1.5(JDK 1.5)进行了优化。这个压缩包包含了json-lib库的二进制文件,用于在Android和Java平台上解析和生成JSON数据。尽管这个版本是针对JDK 1.5,但...
4. **XML与JSON互转**:除了基本的JSON操作,`json-lib`还提供了XML与JSON之间的转换功能,这对于需要在XML和JSON之间进行数据交换的应用非常有用。 5. **依赖包的集成**:`json-lib-2.3-jdk15`开发包包含了所有...
4. **XML到JSON**: `json-lib`还支持XML数据到JSON的转换,这对于在不同的数据格式之间进行转换非常有用。 `json-lib`的使用方法通常包括以下步骤: 1. **引入依赖**: 首先,你需要在项目中引入`json-lib-2.4-jdk...
这在接收到JSON格式的响应时非常有用,可以将JSON转换回对应的Java对象以便进一步处理。 3. **XML与JSON互转**:JSON Lib还提供了XML和JSON之间的转换功能,使得两种数据交换格式可以灵活切换。 4. **处理复杂结构**...
`json-lib-2.4 jar`是JSON-Lib的一个版本,它是一个针对Java的开源项目,用于在Java对象和JSON数据之间进行转换。这个版本兼容JDK 15及更高版本,意味着它能够很好地运行在较新的Java环境中。这个jar包包含了一系列...
3. **处理数组和集合**:JSON-Lib支持将Java的数组和集合转换为JSONArray,反之亦然。这使得在处理JSON中的数组数据时非常方便。 4. **JSONPath支持**:JSON-Lib还提供了类似XPath的JSONPath,用于查询和提取JSON...
在JSON-lib.jar中,还包含了处理XML与JSON转换的功能,这对于需要在XML和JSON间进行数据交换的应用程序非常有用。例如,你可以将一个XML文档转换成JSON,或者反过来,这对于数据接口或者跨平台的数据交换具有重要...