JSON-lib框架,转换JSON、XML不再困难
2015-08-12 14:25
726 查看
Json-lib可以将Java对象转成json格式的字符串,也可以将Java对象转换成xml格式的文档,同样可以将json字符串转换成Java对象或是将xml字符串转换成Java对象。
一、准备工作
1、首先要去官方下载json-lib工具包
下载地址:
http://sourceforge.net/projects/json-lib/files/json-lib/json-lib-2.4/
目前最新的是2.4的版本,本示例中使用的是v2.3;json-lib还需要以下依赖包:
jakartacommons-lang2.5
jakartacommons-beanutils1.8.0
jakartacommons-collections3.2.1
jakartacommons-logging1.1.1
ezmorph1.0.6
官方网址:http://json-lib.sourceforge.net/
然后在工程中添加如下jar包:
当然你也可以用2.4的json-lib库
你可以在这里看看官方提供的示例:
http://json-lib.sourceforge.net/usage.html
由于本次介绍的示例需要junit工具,所以你还需要添加junit的jar文件,版本是4.8.2版本的,下载地址:https://github.com/KentBeck/junit/downloads
如果你还不了解JSON是什么?那么你应该可以看看http://www.json.org/json-zh.html
2、要转换的JavaBean的代码如下:
[/code]
Birthday.java
[/code]
注意,上面的getter、setter方法省略了,自己构建下。
3、新建JsonlibTest测试类,基本代码如下:
一、准备工作
1、首先要去官方下载json-lib工具包
下载地址:
目前最新的是2.4的版本,本示例中使用的是v2.3;json-lib还需要以下依赖包:
jakartacommons-lang2.5
jakartacommons-beanutils1.8.0
jakartacommons-collections3.2.1
jakartacommons-logging1.1.1
ezmorph1.0.6
官方网址:
然后在工程中添加如下jar包:
当然你也可以用2.4的json-lib库
你可以在这里看看官方提供的示例:
由于本次介绍的示例需要junit工具,所以你还需要添加junit的jar文件,版本是4.8.2版本的,下载地址:
如果你还不了解JSON是什么?那么你应该可以看看
2、要转换的JavaBean的代码如下:
[code]packagecom.hoo.entity;
publicclassStudent{
privateintid;
privateStringname;
privateStringemail;
privateStringaddress;
privateBirthdaybirthday;
//setter、getter
publicStringtoString(){
returnthis.name+"#"+this.id+"#"+this.address+"#"+this.birthday+"#"+this.email;
}
}
[/code]
Birthday.java
[code]packagecom.hoo.entity;
publicclassBirthday{
privateStringbirthday;
publicBirthday(Stringbirthday){
super();
this.birthday=birthday;
}
//setter、getter
publicBirthday(){}
@Override
publicStringtoString(){
returnthis.birthday;
}
}
[/code]
注意,上面的getter、setter方法省略了,自己构建下。
3、新建JsonlibTest测试类,基本代码如下:
[code]packagecom.hoo.test;
importjava.lang.reflect.InvocationTargetException;
importjava.util.ArrayList;
importjava.util.Collection;
importjava.util.Date;
importjava.util.HashMap;
importjava.util.Iterator;
importjava.util.List;
importjava.util.Map;
importjava.util.Set;
importnet.sf.json.JSON;
importnet.sf.json.JSONArray;
importnet.sf.json.JSONFunction;
importnet.sf.json.JSONObject;
importnet.sf.json.JSONSerializer;
importnet.sf.json.JsonConfig;
importnet.sf.json.processors.JsonValueProcessor;
importnet.sf.json.util.PropertyFilter;
importnet.sf.json.xml.XMLSerializer;
importorg.apache.commons.beanutils.PropertyUtils;
importorg.junit.After;
importorg.junit.Before;
importorg.junit.Test;
importcom.hoo.entity.Birthday;
importcom.hoo.entity.Student;
/**
*<b>function:</b>用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
*@authorhoojo
*@createDateNov28,20102:28:39PM
*@fileJsonlibTest.java
*@packagecom.hoo.test
*@projectWebHttpUtils
*@blog'target='_blank'>http://blog.csdn.net/IBM_hoojo[/code] *@emailhoojo_@126.com*@version1.0*/@SuppressWarnings({"deprecation","unchecked"})publicclassJsonlibTest{privateJSONArrayjsonArray=null;privateJSONObjectjsonObject=null;privateStudentbean=null;@Beforepublicvoidinit(){jsonArray=newJSONArray();jsonObject=newJSONObject();bean=newStudent();bean.setAddress("address");bean.setEmail("email");bean.setId(1);bean.setName("haha");Birthdayday=newBirthday();day.setBirthday("2010-11-22");bean.setBirthday(day);}@Afterpublicvoiddestory(){jsonArray=null;jsonObject=null;bean=null;System.gc();}publicfinalvoidfail(Stringstring){System.out.println(string);}publicfinalvoidfailRed(Stringstring){System.err.println(string);}}
[/code]
上面的init会在每个方法之前运行,destory会在每个方法完成后执行。分别用到了junit的@Before、@After注解,如果你对junit的这些注解不是很了解,可以看看junit官方的测试用例的example和doc;
JSONObject是将Java对象转换成一个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或是相反,将JSON字符串转换成Java对象,还有一个对象也可以完成上面的功能,它就是JSONSerializer;下面我们就来看看它们是怎么玩转Java对象和JSON的。
二、Java对象序列化成JSON对象
1、将JavaObject转换吃JSON字符串
在JsonlibTest中添加如下代码:
[code]/*=========================JavaObject>>>>JSONString===========================*//***<b>function:</b>转JavaBean对象到JSON*@authorhoojo*@createDateNov28,20102:35:54PM*/@TestpublicvoidwriteEntity2JSON(){fail("==============JavaBean>>>JSONObject==================");fail(JSONObject.fromObject(bean).toString());fail("==============JavaBean>>>JSONArray==================");fail(JSONArray.fromObject(bean).toString());//array会在最外层套上[]fail("==============JavaBean>>>JSONObject==================");fail(JSONSerializer.toJSON(bean).toString());fail("========================JsonConfig========================");JsonConfigjsonConfig=newJsonConfig();jsonConfig.registerJsonValueProcessor(Birthday.class,newJsonValueProcessor(){publicObjectprocessArrayValue(Objectvalue,JsonConfigjsonConfig){if(value==null){returnnewDate();}returnvalue;}publicObjectprocessObjectValue(Stringkey,Objectvalue,JsonConfigjsonConfig){fail("key:"+key);returnvalue+"##修改过的日期";}});jsonObject=JSONObject.fromObject(bean,jsonConfig);fail(jsonObject.toString());Studentstudent=(Student)JSONObject.toBean(jsonObject,Student.class);fail(jsonObject.getString("birthday"));fail(student.toString());fail("#####################JsonPropertyFilter############################");jsonConfig.setJsonPropertyFilter(newPropertyFilter(){publicbooleanapply(Objectsource,Stringname,Objectvalue){fail(source+"%%%"+name+"--"+value);//忽略birthday属性if(value!=null&&Birthday.class.isAssignableFrom(value.getClass())){returntrue;}returnfalse;}});fail(JSONObject.fromObject(bean,jsonConfig).toString());fail("#################JavaPropertyFilter##################");jsonConfig.setRootClass(Student.class);jsonConfig.setJavaPropertyFilter(newPropertyFilter(){publicbooleanapply(Objectsource,Stringname,Objectvalue){fail(name+"@"+value+"#"+source);if("id".equals(name)||"email".equals(name)){value=name+"@@";returntrue;}returnfalse;}});//jsonObject=JSONObject.fromObject(bean,jsonConfig);//student=(Student)JSONObject.toBean(jsonObject,Student.class);//fail(student.toString());student=(Student)JSONObject.toBean(jsonObject,jsonConfig);fail("Student:"+student.toString());}
[/code]
fromObject将Java对象转换成json字符串,toBean将json对象转换成Java对象;
上面方法值得注意的是使用了JsonConfig这个对象,这个对象可以在序列化的时候对JavaObject的数据进行处理、过滤等
上面的jsonConfig的registerJsonValueProcessor方法可以完成对象值的处理和修改,比如处理生日为null时,给一个特定的值。同样setJsonPropertyFilter和setJavaPropertyFilter都是完成对转换后的值的处理。
运行上面的代码可以在控制台看到如下结果:
[code]==============JavaBean>>>JSONObject=================={"address":"address","birthday":{"birthday":"2010-11-22"},"email":"email","id":1,"name":"haha"}==============JavaBean>>>JSONArray==================[{"address":"address","birthday":{"birthday":"2010-11-22"},"email":"email","id":1,"name":"haha"}]==============JavaBean>>>JSONObject=================={"address":"address","birthday":{"birthday":"2010-11-22"},"email":"email","id":1,"name":"haha"}========================JsonConfig========================key:birthday{"address":"address","birthday":"2010-11-22##修改过的日期","email":"email","id":1,"name":"haha"}2010-11-22##修改过的日期haha#1#address#null#email#####################JsonPropertyFilter############################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--haha{"address":"address","email":"email","id":1,"name":"haha"}#################JavaPropertyFilter##################address@address#null#0#null#null#nullbirthday@2010-11-22##修改过的日期#null#0#address#null#nullemail@email#null#0#address#null#nullid@1#null#0#address#null#nullname@haha#null#0#address#null#nullStudent:haha#0#address#null#null
[/code]
2、将JavaList集合转换吃JSON字符串[code]/***<b>function:</b>转换JavaList集合到JSON*@authorhoojo*@createDateNov28,20102:36:15PM*/@TestpublicvoidwriteList2JSON(){fail("==============JavaList>>>JSONArray==================");List<Student>stu=newArrayList<Student>();stu.add(bean);bean.setName("jack");stu.add(bean);fail(JSONArray.fromObject(stu).toString());fail(JSONSerializer.toJSON(stu).toString());}
[/code]
运行此方法后,可以看到控制台输出:
[code]==============JavaList>>>JSONArray==================[{"address":"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"}][{"address":"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"}]
[/code]
如果你是转换List集合,一定得用JSONArray或是JSONSrializer提供的序列化方法。如果你用JSONObject.fromObject方法转换List会出现异常,通常使用JSONSrializer这个JSON序列化的方法,它会自动识别你传递的对象的类型,然后转换成相应的JSON字符串。
3、将Map集合转换成JSON对象[code]/***<b>function:</b>转JavaMap对象到JSON*@authorhoojo*@createDateNov28,20102:37:35PM*/@TestpublicvoidwriteMap2JSON(){Map<String,Object>map=newHashMap<String,Object>();map.put("A",bean);bean.setName("jack");map.put("B",bean);map.put("name","json");map.put("bool",Boolean.TRUE);map.put("int",newInteger(1));map.put("arr",newString[]{"a","b"});map.put("func","function(i){returnthis.arr[i];}");fail("==============JavaMap>>>JSONObject==================");fail(JSONObject.fromObject(map).toString());fail("==============JavaMap>>>JSONArray==================");fail(JSONArray.fromObject(map).toString());fail("==============JavaMap>>>JSONObject==================");fail(JSONSerializer.toJSON(map).toString());}
[/code]
上面的Map集合有JavaBean、String、Boolean、Integer、以及Array和js的function函数的字符串。
运行上面的程序,结果如下:
[code]==============JavaMap>>>JSONObject=================={"arr":["a","b"],"A":{"address":"address","birthday":{"birthday":"2010-11-22"},"email":"email","id":1,"name":"jack"},"int":1,"B":{"address":"address","birthday":{"birthday":"2010-11-22"},"email":"email","id":1,"name":"jack"},"name":"json","func":function(i){returnthis.arr[i];},"bool":true}==============JavaMap>>>JSONArray==================[{"arr":["a","b"],"A":{"address":"address","birthday":{"birthday":"2010-11-22"},"email":"email","id":1,"name":"jack"},"int":1,"B":{"address":"address","birthday":{"birthday":"2010-11-22"},"email":"email","id":1,"name":"jack"},"name":"json","func":function(i){returnthis.arr[i];},"bool":true}]==============JavaMap>>>JSONObject=================={"arr":["a","b"],"A":{"address":"address","birthday":{"birthday":"2010-11-22"},"email":"email","id":1,"name":"jack"},"int":1,"B":{"address":"address","birthday":{"birthday":"2010-11-22"},"email":"email","id":1,"name":"jack"},"name":"json","func":function(i){returnthis.arr[i];},"bool":true}
[/code]
4、将更多类型转换成JSON[code]/***<b>function:</b>转换更多数组类型到JSON*@authorhoojo*@createDateNov28,20102:39:19PM*/@TestpublicvoidwriteObject2JSON(){String[]sa={"a","b","c"};fail("==============JavaStringArray>>>JSONArray==================");fail(JSONArray.fromObject(sa).toString());fail(JSONSerializer.toJSON(sa).toString());fail("==============JavabooleanArray>>>JSONArray==================");boolean[]bo={true,false,true};fail(JSONArray.fromObject(bo).toString());fail(JSONSerializer.toJSON(bo).toString());Object[]o={1,"a",true,'A',sa,bo};fail("==============JavaObjectArray>>>JSONArray==================");fail(JSONArray.fromObject(o).toString());fail(JSONSerializer.toJSON(o).toString());fail("==============JavaString>>>JSON==================");fail(JSONArray.fromObject("['json','is','easy']").toString());fail(JSONObject.fromObject("{'json':'iseasy'}").toString());fail(JSONSerializer.toJSON("['json','is','easy']").toString());fail("==============JavaJSONObject>>>JSON==================");jsonObject=newJSONObject().element("string","JSON").element("integer","1").element("double","2.0").element("boolean","true");fail(JSONSerializer.toJSON(jsonObject).toString());fail("==============JavaJSONArray>>>JSON==================");jsonArray=newJSONArray().element("JSON").element("1").element("2.0").element("true");fail(JSONSerializer.toJSON(jsonArray).toString());fail("==============JavaJSONArrayJsonConfig#setArrayMode>>>JSON==================");Listinput=newArrayList();input.add("JSON");input.add("1");input.add("2.0");input.add("true");JSONArrayjsonArray=(JSONArray)JSONSerializer.toJSON(input);JsonConfigjsonConfig=newJsonConfig();jsonConfig.setArrayMode(JsonConfig.MODE_OBJECT_ARRAY);Object[]output=(Object[])JSONSerializer.toJava(jsonArray,jsonConfig);System.out.println(output[0]);fail("==============JavaJSONFunction>>>JSON==================");Stringstr="{'func':function(param){doSomethingWithParam(param);}}";JSONObjectjsonObject=(JSONObject)JSONSerializer.toJSON(str);JSONFunctionfunc=(JSONFunction)jsonObject.get("func");fail(func.getParams()[0]);fail(func.getText());}
[/code]
运行后结果如下:
[code]==============JavaStringArray>>>JSONArray==================["a","b","c"]["a","b","c"]==============JavabooleanArray>>>JSONArray==================[true,false,true][true,false,true]==============JavaObjectArray>>>JSONArray==================[1,"a",true,"A",["a","b","c"],[true,false,true]][1,"a",true,"A",["a","b","c"],[true,false,true]]==============JavaString>>>JSON==================["json","is","easy"]{"json":"iseasy"}["json","is","easy"]==============JavaJSONObject>>>JSON=================={"string":"JSON","integer":"1","double":"2.0","boolean":"true"}==============JavaJSONArray>>>JSON==================["JSON","1","2.0","true"]==============JavaJSONArrayJsonConfig#setArrayMode>>>JSON==================JSON==============JavaJSONFunction>>>JSON==================paramdoSomethingWithParam(param);
[/code]
这里还有一个JSONFunction的对象,可以转换JavaScript的function。可以获取方法参数和方法体。同时,还可以用JSONObject、JSONArray构建Java对象,完成Java对象到JSON字符串的转换。
三、JSON对象反序列化成Java对象
1、将json字符串转成Java对象
[code]privateStringjson="{\"address\":\"chian\",\"birthday\":{\"birthday\":\"2010-11-22\"},"+"\"email\":\"email@123.com\",\"id\":22,\"name\":\"tom\"}";/***<b>function:</b>将json字符串转化为java对象*@authorhoojo*@createDateNov28,20103:01:16PM*/@TestpublicvoidreadJSON2Bean(){fail("==============JSONObjectString>>>JavaBean==================");jsonObject=JSONObject.fromObject(json);Studentstu=(Student)JSONObject.toBean(jsonObject,Student.class);fail(stu.toString());}
[/code]
运行后,结果如下:
[code]==============JSONObjectString>>>JavaBean==================tom#22#chian#2010-11-22#email@123.com
[/code]
2、将json字符串转换成动态Java对象(MorphDynaBean)
[code]privateStringjson="{\"address\":\"chian\",\"birthday\":{\"birthday\":\"2010-11-22\"},"+"\"email\":\"email@123.com\",\"id\":22,\"name\":\"tom\"}";@TestpublicvoidreadJSON2DynaBean(){try{fail("==============JSONObjectString>>>JavaMorphDynaBean==================");JSONjo=JSONSerializer.toJSON(json);Objecto=JSONSerializer.toJava(jo);//MorphDynaBeanfail(PropertyUtils.getProperty(o,"address").toString());jsonObject=JSONObject.fromObject(json);fail(jsonObject.getString("email"));o=JSONSerializer.toJava(jsonObject);//MorphDynaBeanfail(PropertyUtils.getProperty(o,"name").toString());}catch(IllegalAccessExceptione){e.printStackTrace();}catch(InvocationTargetExceptione){e.printStackTrace();}catch(NoSuchMethodExceptione){e.printStackTrace();}}
[/code]
转换后的对象Object是一个MorphDynaBean的动态JavaBean,通过PropertyUtils可以获得指定的属性的值。
运行后结果如下:
[code]==============JSONObjectString>>>JavaMorphDynaBean=============chianemail@123.comtom
[/code]
3、将json字符串转成Java的Array数组
[code]privateStringjson="{\"address\":\"chian\",\"birthday\":{\"birthday\":\"2010-11-22\"},"+"\"email\":\"email@123.com\",\"id\":22,\"name\":\"tom\"}";@TestpublicvoidreadJSON2Array(){try{fail("==============JSONArryString>>>JavaArray==================");json="["+json+"]";jsonArray=JSONArray.fromObject(json);fail("#%%%"+jsonArray.get(0).toString());Object[]os=jsonArray.toArray();System.out.println(os.length);fail(JSONArray.fromObject(json).join(""));fail(os[0].toString());Student[]stus=(Student[])JSONArray.toArray(jsonArray,Student.class);System.out.println(stus.length);System.out.println(stus[0]);}catch(Exceptione){e.printStackTrace();}}
[/code]
运行的结果如下:
[code]==============JSONArryString>>>JavaArray==================#%%%{"address":"chian","birthday":{"birthday":"2010-11-22"},"email":"email@123.com","id":22,"name":"tom"}1{"address":"chian","birthday":{"birthday":"2010-11-22"},"email":"email@123.com","id":22,"name":"tom"}{"address":"chian","birthday":{"birthday":"2010-11-22"},"email":"email@123.com","id":22,"name":"tom"}1tom#22#chian#2010-11-22#email@123.com
[/code]
4、将JSON字符串转成Java的List集合
[code]privateStringjson="{\"address\":\"chian\",\"birthday\":{\"birthday\":\"2010-11-22\"},"+"\"email\":\"email@123.com\",\"id\":22,\"name\":\"tom\"}";@TestpublicvoidreadJSON2List(){try{fail("==============JSONArryString>>>JavaList==================");json="["+json+"]";jsonArray=JSONArray.fromObject(json);List<Student>list=JSONArray.toList(jsonArray,Student.class);System.out.println(list.size());System.out.println(list.get(0));list=JSONArray.toList(jsonArray);System.out.println(list.size());System.out.println(list.get(0));//MorphDynaBean}catch(Exceptione){e.printStackTrace();}}
[/code]
运行后结果如下:
[code]==============JSONArryString>>>JavaList==================1tom#22#chian#2010-11-22#email@123.com1net.sf.ezmorph.bean.MorphDynaBean@141b571[{id=22,birthday=net.sf.ezmorph.bean.MorphDynaBean@b23210[{birthday=2010-11-22}],address=chian,email=email@123.com,name=tom}]
[/code]
5、将json字符串转换成Collection接口
[code]privateStringjson="{\"address\":\"chian\",\"birthday\":{\"birthday\":\"2010-11-22\"},"+"\"email\":\"email@123.com\",\"id\":22,\"name\":\"tom\"}";@TestpublicvoidreadJSON2Collection(){try{fail("==============JSONArryString>>>JavaCollection==================");json="["+json+"]";jsonArray=JSONArray.fromObject(json);Collection<Student>con=JSONArray.toCollection(jsonArray,Student.class);System.out.println(con.size());Object[]stt=con.toArray();System.out.println(stt.length);fail(stt[0].toString());}catch(Exceptione){e.printStackTrace();}}
[/code]
刚才上面的将json转换成list提示该方法过时,这里有toCollection,可以用此方法代替toList方法;运行后结果如下:
[code]==============JSONArryString>>>JavaCollection==================11tom#22#chian#2010-11-22#email@123.com
[/code]
6、将json字符串转换成Map集合[code]@TestpublicvoidreadJSON2Map(){try{fail("==============JSONArryString>>>JavaMap==================");json="{\"arr\":[\"a\",\"b\"],\"A\":{\"address\":\"address\",\"birthday\":{\"birthday\":\"2010-11-22\"},"+"\"email\":\"email\",\"id\":1,\"name\":\"jack\"},\"int\":1,"+"\"B\":{\"address\":\"address\",\"birthday\":{\"birthday\":\"2010-11-22\"},"+"\"email\":\"email\",\"id\":1,\"name\":\"jack\"},\"name\":\"json\",\"bool\":true}";jsonObject=JSONObject.fromObject(json);Map<String,Class<?>>clazzMap=newHashMap<String,Class<?>>();clazzMap.put("arr",String[].class);clazzMap.put("A",Student.class);clazzMap.put("B",Student.class);Map<String,?>mapBean=(Map)JSONObject.toBean(jsonObject,Map.class,clazzMap);System.out.println(mapBean);Set<String>set=mapBean.keySet();Iterator<String>iter=set.iterator();while(iter.hasNext()){Stringkey=iter.next();fail(key+":"+mapBean.get(key).toString());}}catch(Exceptione){e.printStackTrace();}}
[/code]
运行后结果如下:
[code]==============JSONArryString>>>JavaMap=================={A=jack#1#address#2010-11-22#email,arr=[a,b],B=jack#1#address#2010-11-22#email,int=1,name=json,bool=true}A:jack#1#address#2010-11-22#emailarr:[a,b]B:jack#1#address#2010-11-22#emailint:1name:jsonbool:true
[/code]
四、JSON-lib对XML的支持
1、将Java对象到XML
[code]/*============================JavaObject>>>>>XML==========================*//***<b>function:</b>转换Java对象到XML*需要额外的jar包:xom.jar*@authorhoojo*@createDateNov28,20102:39:55PM*/@TestpublicvoidwriteObject2XML(){XMLSerializerxmlSerializer=newXMLSerializer();fail("==============JavaStringArray>>>XML==================");//xmlSerializer.setElementName("bean");fail(xmlSerializer.write(JSONArray.fromObject(bean)));String[]sa={"a","b","c"};fail("==============JavaStringArray>>>XML==================");fail(xmlSerializer.write(JSONArray.fromObject(sa)));fail("==============JavabooleanArray>>>XML==================");boolean[]bo={true,false,true};fail(xmlSerializer.write(JSONArray.fromObject(bo)));fail(xmlSerializer.write(JSONSerializer.toJSON(bo)));Object[]o={1,"a",true,'A',sa,bo};fail("==============JavaObjectArray>>>JSONArray==================");fail(xmlSerializer.write(JSONArray.fromObject(o)));fail(xmlSerializer.write(JSONSerializer.toJSON(o)));fail("==============JavaString>>>JSON==================");fail(xmlSerializer.write(JSONArray.fromObject("['json','is','easy']")).toString());fail(xmlSerializer.write(JSONObject.fromObject("{'json':'iseasy'}")).toString());fail(xmlSerializer.write(JSONSerializer.toJSON("['json','is','easy']")).toString());}
[/code]
主要运用的是XMLSerializer的write方法,这个方法可以完成java对象到xml的转换,不过你很容易就可以看到这个xml序列化对象,需要先将java对象转成json对象,然后再将json转换吃xml文档。
运行后结果如下:
[code]==============JavaStringArray>>>XML==================<?xmlversion="1.0"encoding="UTF-8"?><a><eclass="object"><addresstype="string">address</address><birthdayclass="object"><birthdaytype="string">2010-11-22</birthday></birthday><emailtype="string">email</email><idtype="number">1</id><nametype="string">haha</name></e></a>==============JavaStringArray>>>XML==================<?xmlversion="1.0"encoding="UTF-8"?><a><etype="string">a</e><etype="string">b</e><etype="string">c</e></a>==============JavabooleanArray>>>XML==================<?xmlversion="1.0"encoding="UTF-8"?><a><etype="boolean">true</e><etype="boolean">false</e><etype="boolean">true</e></a><?xmlversion="1.0"encoding="UTF-8"?><a><etype="boolean">true</e><etype="boolean">false</e><etype="boolean">true</e></a>==============JavaObjectArray>>>JSONArray==================<?xmlversion="1.0"encoding="UTF-8"?><a><etype="number">1</e><etype="string">a</e><etype="boolean">true</e><etype="string">A</e><eclass="array"><etype="string">a</e><etype="string">b</e><etype="string">c</e></e><eclass="array"><etype="boolean">true</e><etype="boolean">false</e><etype="boolean">true</e></e></a><?xmlversion="1.0"encoding="UTF-8"?><a><etype="number">1</e><etype="string">a</e><etype="boolean">true</e><etype="string">A</e><eclass="array"><etype="string">a</e><etype="string">b</e><etype="string">c</e></e><eclass="array"><etype="boolean">true</e><etype="boolean">false</e><etype="boolean">true</e></e></a>==============JavaString>>>JSON==================<?xmlversion="1.0"encoding="UTF-8"?><a><etype="string">json</e><etype="string">is</e><etype="string">easy</e></a><?xmlversion="1.0"encoding="UTF-8"?><o><jsontype="string">iseasy</json></o><?xmlversion="1.0"encoding="UTF-8"?><a><etype="string">json</e><etype="string">is</e><etype="string">easy</e></a>
[/code]
上面的节点名称有点乱,你可以通过setElementName设置节点名称
2、将XML转换成Java对象
[code]/*============================XMLString>>>>>JavaObject==========================*//***<b>function:</b>转换xml文档到java对象*@authorhoojo*@createDateNov28,20103:00:27PM*/@TestpublicvoidreadXML2Object(){XMLSerializerxmlSerializer=newXMLSerializer();fail("==============XML>>>>JavaStringArray==================");String[]sa={"a","b","c"};jsonArray=(JSONArray)xmlSerializer.read(xmlSerializer.write(JSONArray.fromObject(sa)));fail(jsonArray.toString());String[]s=(String[])JSONArray.toArray(jsonArray,String.class);fail(s[0].toString());fail("==============XML>>>>JavabooleanArray==================");boolean[]bo={true,false,true};jsonArray=(JSONArray)xmlSerializer.read(xmlSerializer.write(JSONArray.fromObject(bo)));bo=(boolean[])JSONArray.toArray(jsonArray,boolean.class);fail(bo.toString());System.out.println(bo[0]);jsonArray=(JSONArray)xmlSerializer.read(xmlSerializer.write(JSONSerializer.toJSON(bo)));bo=(boolean[])JSONArray.toArray(jsonArray,boolean.class);fail(bo.toString());System.out.println(bo[0]);fail("==============JavaObjectArray>>>JSONArray==================");Object[]o={1,"a",true,'A',sa,bo};jsonArray=(JSONArray)xmlSerializer.read(xmlSerializer.write(JSONArray.fromObject(o)));System.out.println(jsonArray.getInt(0));System.out.println(jsonArray.get(1));System.out.println(jsonArray.getBoolean(2));jsonArray=(JSONArray)xmlSerializer.read(xmlSerializer.write(JSONSerializer.toJSON(o)));System.out.println(jsonArray.get(4));System.out.println(jsonArray.getJSONArray(5).get(0));System.out.println(jsonArray.get(5));fail("==============JavaString>>>JSON==================");jsonArray=(JSONArray)xmlSerializer.read(xmlSerializer.write(JSONArray.fromObject("['json','is','easy']")).toString());s=(String[])JSONArray.toArray(jsonArray,String.class);fail(s[0].toString());jsonObject=(JSONObject)xmlSerializer.read(xmlSerializer.write(JSONObject.fromObject("{'json':'iseasy'}")).toString());Objectobj=JSONObject.toBean(jsonObject);System.out.println(obj);jsonArray=(JSONArray)xmlSerializer.read(xmlSerializer.write(JSONSerializer.toJSON("['json','is','easy']")).toString());s=(String[])JSONArray.toArray(jsonArray,String.class);fail(s[1].toString());}
[/code]
主要运用到XMLSerializer的read方法,将xml内容读取后,转换成Java对象。运行后结果如下:
[code]==============XML>>>>JavaStringArray==================["a","b","c"]a==============XML>>>>JavabooleanArray==================[Z@15856a5true[Z@79ed7ftrue==============JavaObjectArray>>>JSONArray==================1atrue["a","b","c"]true["true","false","true"]==============JavaString>>>JSON==================jsonnet.sf.ezmorph.bean.MorphDynaBean@c09554[{json=iseasy}]is
[/code]
3、将xml的字符串内容,转换成Java的Array对象[code]@TestpublicvoidtestReadXml2Array(){Stringstr="<aclass=\"array\">"+"<etype=\"function\"params=\"i,j\">"+"returnmatrix[i][j];"+"</e>"+"</a>";JSONArrayjson=(JSONArray)newXMLSerializer().read(str);fail(json.toString());}
[/code]
上面是一段xml字符串格式的文档,将其转换为JSONArray对象。转换后结果如下:
[code][function(i,j){returnmatrix[i][j];}]
[/code]
就是一个数组;
相关文章推荐
- JSON 之FastJson解析
- 【JavaScript】正则表达式
- JSP EL表达式详细介绍
- JS 暴虐算法查找
- JS跟随鼠标飞舞的星星
- JS学习第七天----语句
- 一款js生成的不错的页面上雪花飞舞效果
- 自动生成FTP页面登录地址的js特效
- javascript的特殊条件语句
- jS完整检测并获取IE浏览器信息
- javascript生成m位随机数
- js计算时间加减及有关时间大小的比较
- fastjson 使用方法
- JointJS绘制流程图
- jstl记录
- js 点击按钮跳转 window.location.href
- 突破Javascript长度验证及Mysql错误回显套公式法注入
- 从一行代码里面学点JavaScript
- 理解JavaScript中的依赖注入
- 解析json数据的组件-jackson