1、java与json之间的互操作JSON-lib框架,转换JSON、XML不再困难Json-lib可以将Java对象转成json格式的字符串,也可以将Java对象转换成xml格式的文档,同样可以将json字符串转换成Java对象或是将xml字符串转换成Java对象。一、准备工作1、首先要去官方下载json-lib工具包下载地址:目前最新的是2.4的版本,本示例中使用的是v2.3;json-lib还需要以下依赖包:jakarta commons-lang 2.5 jakarta commons-beanutils 1.8.0 jakarta commons-collections 3.2.1 ja
2、karta commons-logging 1.1.1 ezmorph 1.0.6 官方网址:http:/json-然后在工程中添加如下jar包:当然你也可以用2.4的json-lib库你可以在这里看看官方提供的示例:http:/json-由于本次介绍的示例需要junit工具,所以你还需要添加junit的jar文件,版本是4.8.2版本的,下载地址:如果你还不了解JSON是什么?那么你应该可以看看http:/www.json.org/json-zh.html2、要转换的JavaBean的代码如下:package com.hoo.entity;publicclass Student privat
3、eint id; private String name; private String email; private String address; private Birthday birthday; /setter、getter public String toString()returnthis.name + # + this.id + # + this.address + # + this.birthday + # + this.email; Birthday.java package com.hoo.entity;publicclass Birthday private Strin
4、g birthday; public Birthday(Stringbirthday) super();this.birthday =birthday; /setter、getter public Birthday() Override public String toString()returnthis.birthday; 注意,上面的getter、setter方法省略了,自己构建下。3、新建JsonlibTest测试类,基本代码如下:package com.hoo.test;import java.lang.reflect.InvocationTargetException;import
5、java.util.ArrayList;import java.util.Collection;import java.util.Date;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Set;import net.sf.json.JSON;import net.sf.json.JSONArray;import net.sf.json.JSONFunction;import net.sf.json.JSONObject;
6、import net.sf.json.JSONSerializer;import net.sf.json.JsonConfig;import net.sf.json.processors.JsonValueProcessor;import net.sf.json.util.PropertyFilter;import net.sf.json.xml.XMLSerializer;import mons.beanutils.PropertyUtils;import org.junit.After;import org.junit.Before;import org.junit.Test;import
7、 com.hoo.entity.Birthday;import com.hoo.entity.Student;/*function: 用json-lib转换java对象到JSON字符串* 读取json字符串到java对象,序列化jsonObject到xml*json-lib-version: json-lib-2.3-jdk15.jar* 依赖包: *commons-beanutils.jar*commons-collections-3.2.jar*ezmorph-1.0.3.jar*commons-lang.jar*commons-logging.jar*author hoojo*creat
8、eDate Nov 28, 2010 2:28:39 PM*file JsonlibTest.java*package com.hoo.test*project WebHttpUtils*blog *email hoojo_*version 1.0*/SuppressWarnings( deprecation, unchecked )publicclass JsonlibTest private JSONArrayjsonArray = null; private JSONObjectjsonObject = null; private Student bean =null; Before p
9、ublicvoid init() jsonArray = new JSONArray(); jsonObject = new JSONObject(); bean = new Student();bean.setAddress(address);bean.setEmail(email);bean.setId(1);bean.setName(haha);Birthday day = new Birthday();day.setBirthday(2010-11-22);bean.setBirthday(day); After publicvoid destory() jsonArray = nul
10、l;jsonObject = null;bean = null;System.gc(); publicfinalvoid fail(Stringstring) System.out.println(string); publicfinalvoid failRed(Stringstring) System.err.println(string); 上面的init会在每个方法之前运行,destory会在每个方法完成后执行。分别用到了junit的Before、After注解,如果你对junit的这些注解不是很了解,可以看看junit官方的测试用例的example和doc;JSONObject是将Ja
11、va对象转换成一个json的Object形式,JSONArray是将一个Java对象转换成json的Array格式。那什么是json的Object形式、Array形式?用通俗易懂的方法将,所谓的json的Object形式就是一个花括号里面存放的如JavaMap的键值对,如:name:hoojo, age: 24;那么json的Array形式呢?就是中括号,括起来的数组。如: json, true, 22;如果你还想了解更多json方面的知识,请看:http:/www.json.org/json-zh.html除了上面的JSONArray、JSONObject可以将Java对象转换成JSON或是
12、相反,将JSON字符串转换成Java对象,还有一个对象也可以完成上面的功能,它就是JSONSerializer;下面我们就来看看它们是怎么玩转Java对象和JSON的。二、 Java对象序列化成JSON对象1、将JavaObject转换吃JSON字符串在JsonlibTest中添加如下代码:/*=Java Object JSON String =*/*function:转Java Bean对象到JSON*author hoojo*createDate Nov 28, 2010 2:35:54 PM*/TestpublicvoidwriteEntity2JSON() fail(=Java Bea
13、n JSON Object=);fail(JSONObject.fromObject(bean).toString();fail(=Java Bean JSON Array=);fail(JSONArray.fromObject(bean).toString();/array会在最外层套上fail(=Java Bean JSON Object =);fail(JSONSerializer.toJSON(bean).toString(); fail(=JsonConfig=);JsonConfig jsonConfig = new JsonConfig(); jsonConfig.registe
14、rJsonValueProcessor(Birthday.class, new JsonValueProcessor() public Object processArrayValue(Object value, JsonConfig jsonConfig) if (value =null) returnnew Date();return value;public Object processObjectValue(String key, Object value, JsonConfigjsonConfig) fail(key: + key);return value + #修改过的日期; )
15、;jsonObject = JSONObject.fromObject(bean, jsonConfig); fail(jsonObject.toString();Student student = (Student) JSONObject.toBean(jsonObject, Student.class);fail(jsonObject.getString(birthday);fail(student.toString(); fail(#JsonPropertyFilter#);jsonConfig.setJsonPropertyFilter(new PropertyFilter() pub
16、licboolean apply(Object source, String name, Object value) fail(source + % + name + - + value);/忽略birthday属性if (value !=null & Birthday.class.isAssignableFrom(value.getClass() return true;return false;); fail(JSONObject.fromObject(bean, jsonConfig).toString();fail(#JavaPropertyFilter#);jsonConfig.se
17、tRootClass(Student.class); jsonConfig.setJavaPropertyFilter(new PropertyFilter() publicboolean apply(Object source, String name, Object value) fail(name + + value + # + source);if (id.equals(name)| email.equals(name) value = name + ; return true;return false;); /jsonObject = JSONObject.fromObject(be
18、an, jsonConfig); /student = (Student) JSONObject.toBean(jsonObject,Student.class); /fail(student.toString();student = (Student) JSONObject.toBean(jsonObject, jsonConfig);fail(Student: + student.toString();fromObject将Java对象转换成json字符串,toBean将json对象转换成Java对象;上面方法值得注意的是使用了JsonConfig这个对象,这个对象可以在序列化的时候对Ja
19、vaObject的数据进行处理、过滤等上面的jsonConfig的registerJsonValueProcessor方法可以完成对象值的处理和修改,比如处理生日为null时,给一个特定的值。同样setJsonPropertyFilter和setJavaPropertyFilter都是完成对转换后的值的处理。运行上面的代码可以在控制台看到如下结果:=Java Bean JSONObject=address:address,birthday:birthday:2010-11-22,email:email,id:1,name:haha=Java Bean JSONArray=address:add
20、ress,birthday:birthday:2010-11-22,email:email,id:1,name:haha=Java Bean JSONObject =address:address,birthday:birthday:2010-11-22,email:email,id:1,name:haha=JsonConfig=key:birthdayaddress:address,birthday:2010-11-22#修改过的日期,email:email,id:1,name:haha2010-11-22#修改过的日期haha#1#address#null#email#JsonProper
21、tyFilter#haha#1#address#2010-11-22#email%address-addresshaha#1#address#2010-11-22#email%birthday-2010-11-22haha#1#address#2010-11-22#email%email-emailhaha#1#address#2010-11-22#email%id-1haha#1#address#2010-11-22#email%name-hahaaddress:address,email:email,id:1,name:haha#JavaPropertyFilter#addressaddr
22、ess#null#0#null#null#nullbirthday2010-11-22#修改过的日期#null#0#address#null#nullemailemail#null#0#address#null#nullid1#null#0#address#null#nullnamehaha#null#0#address#null#nullStudent:haha#0#address#null#null2、将JavaList集合转换吃JSON字符串/*function:转换Java List集合到JSON*author hoojo*createDate Nov 28, 2010 2:36:15
23、 PM*/TestpublicvoidwriteList2JSON() fail(=Java List JSON Array=);List stu = new ArrayList();stu.add(bean);bean.setName(jack);stu.add(bean);fail(JSONArray.fromObject(stu).toString();fail(JSONSerializer.toJSON(stu).toString();运行此方法后,可以看到控制台输出:=Java List JSONArray=address:address,birthday:birthday:2010
24、-11-22,email:email,id:1,name:jack,address:address,birthday:birthday:2010-11-22,email:email,id:1,name:jackaddress:address,birthday:birthday:2010-11-22,email:email,id:1,name:jack,address:address,birthday:birthday:2010-11-22,email:email,id:1,name:jack如果你是转换List集合,一定得用JSONArray或是JSONSrializer提供的序列化方法。如果你用JSONObject.fromObject方法转换List会出现异常,通常使用JSONSrializer这个JSON序列化的方法,它会自动识别你传递的对象的类型,然后转换成相应的JSON字符串。3、将Map集合转换成JSON对象/*function:转Java Map对象到JSON*author hoojo*createDate Nov 28, 2010 2:37:35 PM*/TestpublicvoidwriteMap2JSON() Map map = new HashMap();
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1