`
starbhhc
  • 浏览: 655793 次
  • 性别: Icon_minigender_2
  • 来自: 深圳
社区版块
存档分类
最新评论

java与json之间的转换

    博客分类:
  • java
 
阅读更多

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.3json-lib还需要以下依赖包:

jakarta commons-lang 2.5

jakarta commons-beanutils 1.8.0

jakarta commons-collections 3.2.1

jakarta commons-logging 1.1.1

ezmorph 1.0.6

官方网址:http://json-lib.sourceforge.net/

然后在工程中添加如下jar包:

 

当然你也可以用2.4json-lib

你可以在这里看看官方提供的示例:

http://json-lib.sourceforge.net/usage.html

由于本次介绍的示例需要junit工具,所以你还需要添加junitjar文件,版本是4.8.2版本的,下载地址:https://github.com/KentBeck/junit/downloads

如果你还不了解JSON是什么?那么你应该可以看看http://www.json.org/json-zh.html

2要转换的JavaBean的代码如下:

package com.hoo.entity;

 

publicclass Student {

    privateint id;

    private String name;

    private String email;

    private String address;

    private Birthday birthday;

 

    //settergetter

    public String toString(){

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

    }

}

 

Birthday.java

package com.hoo.entity;

 

publicclass Birthday {

    private String birthday;

   

    public Birthday(Stringbirthday) {

       super();

       this.birthday =birthday;

    }

    //settergetter

    public Birthday() {}

   

   @Override

    public String toString(){

       returnthis.birthday;

    }

}

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

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

package com.hoo.test;

 

import java.lang.reflect.InvocationTargetException;

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

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 org.apache.commons.beanutils.PropertyUtils;

import org.junit.After;

import org.junit.Before;

import org.junit.Test;

import com.hoo.entity.Birthday;

import com.hoo.entity.Student;

 

/**

 *<b>function:</b> json-lib转换java对象到JSON字符串

 读取json字符串到java对象,序列化jsonObjectxml

 *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

 *@createDate Nov 28, 2010 2:28:39 PM

 *@file JsonlibTest.java

 *@package com.hoo.test

 *@project WebHttpUtils

 *@blog http://blog.csdn.net/IBM_hoojo

 *@email hoojo_@126.com

 *@version 1.0

 */

@SuppressWarnings({ "deprecation""unchecked" })

publicclass JsonlibTest{

    private JSONArrayjsonArray = null;

    private JSONObjectjsonObject = null;

   

    private Student bean =null;

   

   @Before

    publicvoid 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 = null;

       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官方的测试用例的exampledoc

JSONObject是将Java对象转换成一个jsonObject形式,JSONArray是将一个Java对象转换成jsonArray格式。

那什么是jsonObject形式、Array形式?

用通俗易懂的方法将,所谓的jsonObject形式就是一个花括号里面存放的如JavaMap的键值对,如:{name:’hoojo’, age: 24}

那么jsonArray形式呢?

就是中括号,括起来的数组。如:[ ‘json’, true, 22]

如果你还想了解更多json方面的知识,请看:http://www.json.org/json-zh.html

除了上面的JSONArrayJSONObject可以将Java对象转换成JSON或是相反,将JSON字符串转换成Java对象,还有一个对象也可以完成上面的功能,它就是JSONSerializer;下面我们就来看看它们是怎么玩转Java对象和JSON的。

二、 Java对象序列化成JSON对象

1JavaObject转换吃JSON字符串

JsonlibTest中添加如下代码:

/*=========================Java Object>>>> JSON String ===========================*/

/**

 *<b>function:</b>Java Bean对象到JSON

 *@author hoojo

 *@createDate Nov 28, 2010 2:35:54 PM

 */

@Test

publicvoidwriteEntity2JSON() {

   fail("==============Java Bean >>>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.registerJsonValueProcessor(Birthday.classnew 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 + "##修改过的日期";

       }

 

    });

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

       publicboolean 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.setRootClass(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(bean, jsonConfig);

    //student = (Student) JSONObject.toBean(jsonObject,Student.class);

    //fail(student.toString());

   student = (Student) JSONObject.toBean(jsonObject, jsonConfig);

   fail("Student:" + student.toString());

}

fromObjectJava对象转换成json字符串,toBeanjson对象转换成Java对象;

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

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

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

==============Java Bean >>> JSONObject==================

{"address":"address","birthday":{"birthday":"2010-11-22"},"email":"email","id":1,"name":"haha"}

==============Java Bean >>> JSONArray==================

[{"address":"address","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: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

2JavaList集合转换吃JSON字符串

/**

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

 *@author hoojo

 *@createDate Nov 28, 2010 2:36:15 PM

 */

@Test

publicvoidwriteList2JSON() {

   fail("==============Java List >>>JSON Array==================");

   List<Student> stu = new ArrayList<Student>();

   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-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字符串。

3Map集合转换成JSON对象

/**

 *<b>function:</b>Java Map对象到JSON

 *@author hoojo

 *@createDate Nov 28, 2010 2:37:35 PM

 */

@Test

publicvoidwriteMap2JSON() {

   Map<String, Object> map = new HashMap<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"new Integer(1));

   map.put("arr"new String[] { "a""b" });

   map.put("func""function(i){return this.arr[i]; }");

   fail("==============Java Map >>>JSON Object==================");

   fail(JSONObject.fromObject(map).toString());

   fail("==============Java Map >>>JSON Array ==================");

    fail(JSONArray.fromObject(map).toString());

   fail("==============Java Map >>>JSON Object==================");

   fail(JSONSerializer.toJSON(map).toString());

}

上面的Map集合有JavaBeanStringBooleanInteger、以及Arrayjsfunction函数的字符串。

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

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

==============Java Map >>> 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}]

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

 *@author hoojo

 *@createDate Nov 28, 2010 2:39:19 PM

 */

@Test

publicvoidwriteObject2JSON() {

   String[] sa = {"a""b""c"};

   fail("==============Java StringArray>>> JSON Array ==================");

   fail(JSONArray.fromObject(sa).toString());

   fail(JSONSerializer.toJSON(sa).toString());

   fail("==============Java boolean Array>>> JSON Array ==================");

    boolean[] bo = { true,false, true };

   fail(JSONArray.fromObject(bo).toString());

   fail(JSONSerializer.toJSON(bo).toString());

   Object[] o = { 1, "a", true, 'A', sa, bo };

   fail("==============Java Object Array>>> JSON Array ==================");

    fail(JSONArray.fromObject(o).toString());

   fail(JSONSerializer.toJSON(o).toString());

   fail("==============Java String>>> JSON ==================");

   fail(JSONArray.fromObject("['json','is','easy']").toString());

   fail(JSONObject.fromObject("{'json':'iseasy'}").toString());

   fail(JSONSerializer.toJSON("['json','is','easy']").toString());

   fail("==============Java JSONObject>>> JSON ==================");

   jsonObject = new JSONObject()  

       .element("string""JSON")

       .element("integer""1")

       .element("double""2.0")

       .element("boolean""true"); 

   fail(JSONSerializer.toJSON(jsonObject).toString());

   

   fail("==============Java JSONArray>>> JSON ==================");

   jsonArray = new JSONArray()  

       .element( "JSON" )  

       .element( "1" )  

       .element( "2.0" )  

       .element( "true" );

   fail(JSONSerializer.toJSON(jsonArray).toString());

   

   fail("==============Java JSONArrayJsonConfig#setArrayMode >>> JSON ==================");

   List input = new ArrayList();  

   input.add("JSON");

   input.add("1");

   input.add("2.0");

   input.add("true");  

   JSONArray jsonArray = (JSONArray) JSONSerializer.toJSON( input );  

   JsonConfig jsonConfig = new JsonConfig();  

   jsonConfig.setArrayMode( JsonConfig.MODE_OBJECT_ARRAY );  

   Object[] output = (Object[]) JSONSerializer.toJava(jsonArray,jsonConfig);

   System.out.println(output[0]);

   

   fail("==============Java JSONFunction>>> JSON ==================");

   String str = "{'func': function(param ){ doSomethingWithParam(param); }}";  

   JSONObject jsonObject = (JSONObject) JSONSerializer.toJSON(str);  

   JSONFunction func = (JSONFunction) jsonObject.get("func");  

   fail(func.getParams()[0]);  

   fail(func.getText() );  

}

运行后结果如下:

==============Java StringArray >>>JSON Array ==================

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

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

==============Java boolean Array >>> JSON Array==================

[true,false,true]

[true,false,true]

==============Java Object Array >>>JSON Array ==================

[1,"a",true,"A",["a","b","c"],[true,false,true]]

[1,"a",true,"A",["a","b","c"],[true,false,true]]

==============Java String >>> JSON==================

["json","is","easy"]

{"json":"iseasy"}

["json","is","easy"]

==============Java JSONObject >>>JSON ==================

{"string":"JSON","integer":"1","double":"2.0","boolean":"true"}

==============Java JSONArray >>>JSON ==================

["JSON","1","2.0","true"]

==============Java JSONArrayJsonConfig#setArrayMode >>> JSON ==================

JSON

==============Java JSONFunction >>>JSON ==================

param

doSomethingWithParam(param);

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

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

1json字符串转成Java对象

private String json = "{\"address\":\"chian\",\"birthday\":{\"birthday\":\"2010-11-22\"}," +

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

/**

 *<b>function:</b>json字符串转化为java对象

 *@author hoojo

 *@createDate Nov 28, 2010 3:01:16 PM

 */

@Test

publicvoidreadJSON2Bean() {

   fail("==============JSON Object String>>> Java Bean ==================");

   jsonObject = JSONObject.fromObject(json);

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

   fail(stu.toString());

}

运行后,结果如下:

==============JSONObject String >>> Java Bean ==================

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

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

private String json = "{\"address\":\"chian\",\"birthday\":{\"birthday\":\"2010-11-22\"},"+

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

 

@Test

publicvoidreadJSON2DynaBean() {

    try {

       fail("==============JSON Object String>>> Java MorphDynaBean ==================");

       JSON jo = JSONSerializer.toJSON(json);

       Object o = 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(IllegalAccessException e) {

       e.printStackTrace();

    } catch(InvocationTargetException e) {

       e.printStackTrace();

    } catch(NoSuchMethodException e) {

       e.printStackTrace();

    }

}

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

运行后结果如下:

==============JSONObject String >>> Java MorphDynaBean =============

chian

email@123.com

tom

3json字符串转成JavaArray数组

private String json = "{\"address\":\"chian\",\"birthday\":{\"birthday\":\"2010-11-22\"},"+

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

 

@Test

publicvoidreadJSON2Array() {

    try {

       fail("==============JSON Arry String>>> Java Array ==================");

       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 (Exception e) {

       e.printStackTrace();

    }

}

运行的结果如下:

==============JSONArry String >>> Java Array ==================

#%%%{"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

4JSON字符串转成JavaList集合

private String json = "{\"address\":\"chian\",\"birthday\":{\"birthday\":\"2010-11-22\"},"+

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

 

@Test

publicvoidreadJSON2List() {

    try {

       fail("==============JSON Arry String>>> Java List ==================");

       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 (Exception e) {

       e.printStackTrace();

    }

}

运行后结果如下:

==============JSONArry String >>> Java List ==================

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}

]

5json字符串转换成Collection接口

private String json = "{\"address\":\"chian\",\"birthday\":{\"birthday\":\"2010-11-22\"},"+

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

 

@Test

publicvoidreadJSON2Collection() {

    try {

       fail("==============JSON Arry String>>> Java Collection ==================");

       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 (Exception e) {

       e.printStackTrace();

    }

}

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

==============JSONArry String >>> Java Collection ==================

1

1

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

6json字符串转换成Map集合

@Test

publicvoidreadJSON2Map() {

    try {

       fail("==============JSON Arry String>>> Java Map ==================");

       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 = new HashMap<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()) {

           String key = iter.next();

           fail(key + ":" + mapBean.get(key).toString());

       }

    } catch (Exception e) {

       e.printStackTrace();

    }

}

运行后结果如下:

==============JSONArry String >>> Java Map ==================

{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-libXML的支持

1Java对象到XML

/*============================Java Object>>>>> XML ==========================*/

/**

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

 需要额外的jar包:xom.jar

 *@author hoojo

 *@createDate Nov 28, 2010 2:39:55 PM

 */

@Test

publicvoidwriteObject2XML() {

   XMLSerializer xmlSerializer = new XMLSerializer();

   fail("==============Java String Array>>> XML ==================");

    //xmlSerializer.setElementName("bean");

   fail(xmlSerializer.write(JSONArray.fromObject(bean)));

   String[] sa = {"a""b""c"};

   fail("==============Java String Array>>> XML ==================");

   fail(xmlSerializer.write(JSONArray.fromObject(sa)));

   fail("==============Java boolean Array>>> 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("==============Java Object Array>>> JSON Array ==================");

   fail(xmlSerializer.write(JSONArray.fromObject(o)));

   fail(xmlSerializer.write(JSONSerializer.toJSON(o)));

   fail("==============Java String>>> JSON ==================");

   fail(xmlSerializer.write(JSONArray.fromObject("['json','is','easy']")).toString());

    fail(xmlSerializer.write(JSONObject.fromObject("{'json':'is easy'}")).toString());

   fail(xmlSerializer.write(JSONSerializer.toJSON("['json','is','easy']")).toString());

}

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

运行后结果如下:

==============Java String Array >>> 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>

 

==============Java String Array >>> XML==================

<?xmlversion="1.0"encoding="UTF-8"?>

<a><etype="string">a</e><etype="string">b</e><etype="string">c</e></a>

 

==============Java boolean Array >>> 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>

 

==============Java Object Array >>> JSON Array==================

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

 

==============Java String >>> 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">is easy</json></o>

 

<?xmlversion="1.0"encoding="UTF-8"?>

<a><etype="string">json</e><etype="string">is</e><etype="string">easy</e></a>

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

2XML转换成Java对象

/*============================XML String>>>>> Java Object ==========================*/

/**

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

 *@author hoojo

 *@createDate Nov 28, 2010 3:00:27 PM

 */

@Test

publicvoidreadXML2Object() {

   XMLSerializer xmlSerializer = new XMLSerializer();

   fail("============== XML >>>>Java String Array ==================");

   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 >>>>Java boolean Array ==================");

    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("==============Java Object Array>>> JSON Array ==================");

   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("==============Java String>>> 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':'is easy'}")).toString());

   Object obj = 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());

}

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

============== XML >>>> JavaString Array ==================

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

a

============== XML >>>> Java boolean Array==================

[Z@15856a5

true

[Z@79ed7f

true

==============Java Object Array >>>JSON Array ==================

1

a

true

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

true

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

==============Java String >>> JSON==================

json

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

 {json=is easy}

]

is

3xml的字符串内容,转换成JavaArray对象

@Test

publicvoidtestReadXml2Array() {

   String str = "<aclass=\"array\">" +  

         "<e type=\"function\"params=\"i,j\">" + 

         "return matrix[i][j];" +   

         "</e>" + 

       "</a>";

   JSONArray json = (JSONArray) new XMLSerializer().read(str);

   fail(json.toString());  

}

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

[function(i,j){ return matrix[i][j]; }]

就是一个数组;

分享到:
评论

相关推荐

    java实现Xml与json之间的相互转换操作示例

    java实现Xml与json相互转换的必要性:在Web开发中,我们经常需要在前后端之间进行数据的交换,由于后端和前端使用的数据格式可能不同,这时候就需要实现数据格式的转换,尤其是在使用Java作为后端开发语言时,如何将...

    java与json互相转换的jar包

    以下是对给定的jar包文件及其在Java与JSON转换中的作用的详细解释: 1. **json-lib-2.4-jdk15.jar.zip**:这是JSON库的核心,用于实现Java对象与JSON字符串之间的转换。Json-lib提供了多种类型的转换方法,例如将...

    JAVA-JSON工具转换类

    可能包含的方法有`toJson()`(将Java对象转换为JSON字符串)、`fromJson()`(将JSON字符串解析为Java对象)、`convertToMap()`(将JSON字符串转换为Map)以及`convertToList()`(将JSON字符串转换为List)等。...

    json格式与java类对象相互转换

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于前后端交互,而Java作为后端开发的主要语言,常常需要将JSON格式的数据与Java类对象进行相互转换,以便于数据的处理和传输。Jackson库是...

    Json与java对象之间相互转换源码

    总结一下,JSON与Java对象之间的相互转换是Java开发中常见的任务。通过使用Gson或Jackson这样的库,我们可以方便地实现这一目标,从而简化数据处理流程。在实际项目中,根据具体需求选择合适的库,并理解其基本用法...

    Java组装json和java解析json数组

    附件内容为:Java组装map数据,然后转换为json数据格式;Java解析json数据

    java与json之间的互操作.pdf

    总结来说,JSON-lib是Java开发者处理JSON数据的强大工具,它可以方便地进行Java对象与JSON之间的转换,以及JSON与XML之间的互操作,简化了数据交换和处理的复杂性。在实际项目中,根据需求选择合适的版本和配置,...

    json 与java之间数据的转换

    本教程将深入探讨JSON与Java之间的数据转换,包括JSON对象到Java对象以及Java对象到JSON对象的转换。 首先,为了进行JSON操作,我们需要导入相应的库。在Java中,我们以Jackson库为例,添加以下依赖到项目中: ```...

    Java和JSON之间的相互转换所需要所有的jar包及实例

    本篇文章将详细讲解如何在Java中使用`json-lib`库进行JSON与Java对象之间的相互转换,并提供相关的jar包列表。 首先,`json-lib`是一个非常流行的Java JSON库,它提供了多种Java数据类型与JSON之间的转换功能,包括...

    java 解析 json文件 java 解析 json文件

    Java解析JSON文件是Java开发中常见的一项任务,特别是在与Web服务交互或处理API响应时。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,因其简洁和易于阅读及编写的特点,被广泛应用于网络数据传输...

    java-json.jar.zip

    Java JSON.jar.zip是一个压缩包,其中包含了一个名为`java-json.jar`的Java库,这个库主要功能是处理XML和JSON之间的转换。XML(Extensible Markup Language)和JSON(JavaScript Object Notation)是两种广泛用于...

    Java对象与Json之间的互相转换的jar包

    这个"Java对象与Json之间的互相转换的jar包"正是提供了这样的功能。 这个jar包可能包含了如Jackson、Gson、Fastjson等流行的Java JSON库,它们各自提供了丰富的API来方便开发者进行对象与JSON的转换。 1. Jackson...

    java XML 和json 转换工具类

    java XML 和json 转换工具类 java XML 和json 转换工具类java XML 和json 转换工具类 java XML 和json 转换工具类java XML 和json 转换工具类 java XML 和json 转换工具类java XML 和json 转换工具类 java XML 和...

    JSON与JAVA数据的转换

    2. Jackson库:Jackson是另一个广泛使用的Java JSON库,提供了`ObjectMapper`类来处理JSON转换。`ObjectMapper.writeValueAsString()`用于对象转JSON,`ObjectMapper.readValue()`用于JSON转对象。 3. org.json库:...

    Java bean转换为Json Schema

    Java Bean转换为Json Schema是一种常见的数据转换操作,特别是在开发基于RESTful API的Web服务时,因为JSON Schema提供了数据验证和文档化的功能。Java Bean是Java编程中的一个概念,它是一类具有特定规则的POJO...

    java与json之间的互操作

    Java与JSON之间的互操作是指在Java程序中对JSON(JavaScript Object Notation)数据进行解析、序列化和反序列化的过程。JSON是一种轻量级的数据交换格式,它易于人阅读和编写,同时也易于机器解析和生成。在Java中,...

    java调用json参数的webservice

    JSON经常用于服务器与Web应用之间传输数据,其结构简洁,格式为键值对集合,易于计算机处理,同时也便于人类阅读和编写。 WebService是一种可以通过Web提供的服务,它使用XML消息传递进行通信。WebService技术可以...

    Java读取json文件,并转化为map取值

    在这个方法中,我们创建了一个`ObjectMapper`实例,它是Jackson库的核心类,用于进行JSON与Java对象之间的映射。`readValue`方法接受两个参数:一个是JSON文件的路径,另一个是目标类型,这里是`Map.class`。 现在...

    Java和JSON之间的转换(附jar包)

    总之,Java与JSON之间的转换是通过各种库实现的,每个库都有其特点和优势。选择哪个库取决于项目需求,如性能、易用性、社区支持等因素。在实际开发中,理解并熟练运用这些库的API,能有效地提高开发效率和代码质量...

    java与json之间的互操作[参照].pdf

    5. **XML与JSON转换**:JSON-lib还提供了`XMLSerializer`类,用于XML与JSON之间的转换。你可以使用`XMLSerializer.toXML()`方法将JSON对象转换为XML字符串,反之,使用`XMLSerializer.fromXML()`方法将XML字符串解析...

Global site tag (gtag.js) - Google Analytics