您的位置:首页 > Web前端 > JavaScript

JSON-lib框架,转换JSON、XML不再困难

2013-07-16 14:45 543 查看
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的代码如下:

packagecom.hoo.entity;


publicclassStudent{

privateintid;

privateStringname;

privateStringemail;

privateStringaddress;

privateBirthdaybirthday;


//setter、getter

publicStringtoString(){

returnthis.name+"#"+this.id+"#"+this.address+"#"+this.birthday+"#"+this.email;

}

}



Birthday.java

packagecom.hoo.entity;


publicclassBirthday{

privateStringbirthday;


publicBirthday(Stringbirthday){

super();

this.birthday=birthday;

}

//setter、getter

publicBirthday(){}


@Override

publicStringtoString(){

returnthis.birthday;

}

}


注意,上面的getter、setter方法省略了,自己构建下。

3、新建JsonlibTest测试类,基本代码如下:

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;


@Before

publicvoidinit(){

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);

}


@After

publicvoiddestory(){

jsonArray=null;

jsonObject=null;

bean=null;

System.gc();

}


publicfinalvoidfail(Stringstring){

System.out.println(string);

}


publicfinalvoidfailRed(Stringstring){

System.err.println(string);

}


}


上面的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中添加如下代码:

/*=========================JavaObject>>>>JSONString===========================*/

/**

*<b>function:</b>转JavaBean对象到JSON

*@authorhoojo

*@createDateNov28,20102:35:54PM

*/

@Test

publicvoidwriteEntity2JSON(){

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());

}


fromObject将Java对象转换成json字符串,toBean将json对象转换成Java对象;

上面方法值得注意的是使用了JsonConfig这个对象,这个对象可以在序列化的时候对JavaObject的数据进行处理、过滤等

上面的jsonConfig的registerJsonValueProcessor方法可以完成对象值的处理和修改,比如处理生日为null时,给一个特定的值。同样setJsonPropertyFilter和setJavaPropertyFilter都是完成对转换后的值的处理。

运行上面的代码可以在控制台看到如下结果:

==============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--address

haha#1#address#2010-11-22#email%%%birthday--2010-11-22

haha#1#address#2010-11-22#email%%%email--email

haha#1#address#2010-11-22#email%%%id--1

haha#1#address#2010-11-22#email%%%name--haha

{"address":"address","email":"email","id":1,"name":"haha"}

#################JavaPropertyFilter##################

address@address#null#0#null#null#null

birthday@2010-11-22##修改过的日期#null#0#address#null#null

email@email#null#0#address#null#null

id@1#null#0#address#null#null

name@haha#null#0#address#null#null

Student:haha#0#address#null#null


2、将JavaList集合转换吃JSON字符串

/**

*<b>function:</b>转换JavaList集合到JSON

*@authorhoojo

*@createDateNov28,20102:36:15PM

*/

@Test

publicvoidwriteList2JSON(){

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());

}


运行此方法后,可以看到控制台输出:

==============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"}]


如果你是转换List集合,一定得用JSONArray或是JSONSrializer提供的序列化方法。如果你用JSONObject.fromObject方法转换List会出现异常,通常使用JSONSrializer这个JSON序列化的方法,它会自动识别你传递的对象的类型,然后转换成相应的JSON字符串。

3、将Map集合转换成JSON对象

/**

*<b>function:</b>转JavaMap对象到JSON

*@authorhoojo

*@createDateNov28,20102:37:35PM

*/

@Test

publicvoidwriteMap2JSON(){

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());

}


上面的Map集合有JavaBean、String、Boolean、Integer、以及Array和js的function函数的字符串。

运行上面的程序,结果如下:

==============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}


4、将更多类型转换成JSON

/**

*<b>function:</b>转换更多数组类型到JSON

*@authorhoojo

*@createDateNov28,20102:39:19PM

*/

@Test

publicvoidwriteObject2JSON(){

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());

}


运行后结果如下:

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

param

doSomethingWithParam(param);


这里还有一个JSONFunction的对象,可以转换JavaScript的function。可以获取方法参数和方法体。同时,还可以用JSONObject、JSONArray构建Java对象,完成Java对象到JSON字符串的转换。

三、JSON对象反序列化成Java对象

1、将json字符串转成Java对象

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

*/

@Test

publicvoidreadJSON2Bean(){

fail("==============JSONObjectString>>>JavaBean==================");

jsonObject=JSONObject.fromObject(json);

Studentstu=(Student)JSONObject.toBean(jsonObject,Student.class);

fail(stu.toString());

}


运行后,结果如下:

==============JSONObjectString>>>JavaBean==================

tom#22#chian#2010-11-22#email@123.com


2、将json字符串转换成动态Java对象(MorphDynaBean)

privateStringjson="{\"address\":\"chian\",\"birthday\":{\"birthday\":\"2010-11-22\"},"+

"\"email\":\"email@123.com\",\"id\":22,\"name\":\"tom\"}";


@Test

publicvoidreadJSON2DynaBean(){

try{

fail("==============JSONObjectString>>>JavaMorphDynaBean==================");

JSONjo=JSONSerializer.toJSON(json);

Objecto=JSONSerializer.toJava(jo);//MorphDynaBean

fail(PropertyUtils.getProperty(o,"address").toString());

jsonObject=JSONObject.fromObject(json);

fail(jsonObject.getString("email"));

o=JSONSerializer.toJava(jsonObject);//MorphDynaBean

fail(PropertyUtils.getProperty(o,"name").toString());

}catch(IllegalAccessExceptione){

e.printStackTrace();

}catch(InvocationTargetExceptione){

e.printStackTrace();

}catch(NoSuchMethodExceptione){

e.printStackTrace();

}

}


转换后的对象Object是一个MorphDynaBean的动态JavaBean,通过PropertyUtils可以获得指定的属性的值。

运行后结果如下:

==============JSONObjectString>>>JavaMorphDynaBean=============

chian

email@123.com

tom


3、将json字符串转成Java的Array数组

privateStringjson="{\"address\":\"chian\",\"birthday\":{\"birthday\":\"2010-11-22\"},"+

"\"email\":\"email@123.com\",\"id\":22,\"name\":\"tom\"}";


@Test

publicvoidreadJSON2Array(){

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();

}

}


运行的结果如下:

==============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"}

1

tom#22#chian#2010-11-22#email@123.com


4、将JSON字符串转成Java的List集合

privateStringjson="{\"address\":\"chian\",\"birthday\":{\"birthday\":\"2010-11-22\"},"+

"\"email\":\"email@123.com\",\"id\":22,\"name\":\"tom\"}";


@Test

publicvoidreadJSON2List(){

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();

}

}


运行后结果如下:

==============JSONArryString>>>JavaList==================

1

tom#22#chian#2010-11-22#email@123.com

1

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

]


5、将json字符串转换成Collection接口

privateStringjson="{\"address\":\"chian\",\"birthday\":{\"birthday\":\"2010-11-22\"},"+

"\"email\":\"email@123.com\",\"id\":22,\"name\":\"tom\"}";


@Test

publicvoidreadJSON2Collection(){

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();

}

}


刚才上面的将json转换成list提示该方法过时,这里有toCollection,可以用此方法代替toList方法;运行后结果如下:

==============JSONArryString>>>JavaCollection==================

1

1

tom#22#chian#2010-11-22#email@123.com


6、将json字符串转换成Map集合

@Test

publicvoidreadJSON2Map(){

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();

}

}


运行后结果如下:

==============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#email

arr:[a,b]

B:jack#1#address#2010-11-22#email

int:1

name:json

bool:true


四、JSON-lib对XML的支持

1、将Java对象到XML

/*============================JavaObject>>>>>XML==========================*/

/**

*<b>function:</b>转换Java对象到XML

*需要额外的jar包:xom.jar

*@authorhoojo

*@createDateNov28,20102:39:55PM

*/

@Test

publicvoidwriteObject2XML(){

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());

}


主要运用的是XMLSerializer的write方法,这个方法可以完成java对象到xml的转换,不过你很容易就可以看到这个xml序列化对象,需要先将java对象转成json对象,然后再将json转换吃xml文档。

运行后结果如下:

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


上面的节点名称有点乱,你可以通过setElementName设置节点名称

2、将XML转换成Java对象

/*============================XMLString>>>>>JavaObject==========================*/

/**

*<b>function:</b>转换xml文档到java对象

*@authorhoojo

*@createDateNov28,20103:00:27PM

*/

@Test

publicvoidreadXML2Object(){

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());

}


主要运用到XMLSerializer的read方法,将xml内容读取后,转换成Java对象。运行后结果如下:

==============XML>>>>JavaStringArray==================

["a","b","c"]

a

==============XML>>>>JavabooleanArray==================

[Z@15856a5

true

[Z@79ed7f

true

==============JavaObjectArray>>>JSONArray==================

1

a

true

["a","b","c"]

true

["true","false","true"]

==============JavaString>>>JSON==================

json

net.sf.ezmorph.bean.MorphDynaBean@c09554[

{json=iseasy}

]

is


3、将xml的字符串内容,转换成Java的Array对象

@Test

publicvoidtestReadXml2Array(){

Stringstr="<aclass=\"array\">"+

"<etype=\"function\"params=\"i,j\">"+

"returnmatrix[i][j];"+

"</e>"+

"</a>";

JSONArrayjson=(JSONArray)newXMLSerializer().read(str);

fail(json.toString());

}


上面是一段xml字符串格式的文档,将其转换为JSONArray对象。转换后结果如下:

[function(i,j){returnmatrix[i][j];}]


就是一个数组;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: