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还需要以下依赖包:
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.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的代码如下:
package com.hoo.entity;
publicclass Student {
privateint 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 String 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 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对象,序列化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
*@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官方的测试用例的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中添加如下代码:
/*=========================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.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 + "##修改过的日期";
}
});
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());
}
fromObject将Java对象转换成json字符串,toBean将json对象转换成Java对象;
上面方法值得注意的是使用了JsonConfig这个对象,这个对象可以在序列化的时候对JavaObject的数据进行处理、过滤等
上面的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":"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
2、将JavaList集合转换吃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字符串。
3、将Map集合转换成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集合有JavaBean、String、Boolean、Integer、以及Array和js的function函数的字符串。
运行上面的程序,结果如下:
==============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的对象,可以转换JavaScript的function。可以获取方法参数和方法体。同时,还可以用JSONObject、JSONArray构建Java对象,完成Java对象到JSON字符串的转换。
三、 JSON对象反序列化成Java对象
1、将json字符串转成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
2、将json字符串转换成动态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
3、将json字符串转成Java的Array数组
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
4、将JSON字符串转成Java的List集合
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}
]
5、将json字符串转换成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
6、将json字符串转换成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-lib对XML的支持
1、将Java对象到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());
}
主要运用的是XMLSerializer的write方法,这个方法可以完成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设置节点名称
2、将XML转换成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());
}
主要运用到XMLSerializer的read方法,将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
3、将xml的字符串内容,转换成Java的Array对象
@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相互转换的必要性:在Web开发中,我们经常需要在前后端之间进行数据的交换,由于后端和前端使用的数据格式可能不同,这时候就需要实现数据格式的转换,尤其是在使用Java作为后端开发语言时,如何将...
以下是对给定的jar包文件及其在Java与JSON转换中的作用的详细解释: 1. **json-lib-2.4-jdk15.jar.zip**:这是JSON库的核心,用于实现Java对象与JSON字符串之间的转换。Json-lib提供了多种类型的转换方法,例如将...
可能包含的方法有`toJson()`(将Java对象转换为JSON字符串)、`fromJson()`(将JSON字符串解析为Java对象)、`convertToMap()`(将JSON字符串转换为Map)以及`convertToList()`(将JSON字符串转换为List)等。...
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于前后端交互,而Java作为后端开发的主要语言,常常需要将JSON格式的数据与Java类对象进行相互转换,以便于数据的处理和传输。Jackson库是...
总结一下,JSON与Java对象之间的相互转换是Java开发中常见的任务。通过使用Gson或Jackson这样的库,我们可以方便地实现这一目标,从而简化数据处理流程。在实际项目中,根据具体需求选择合适的库,并理解其基本用法...
附件内容为:Java组装map数据,然后转换为json数据格式;Java解析json数据
总结来说,JSON-lib是Java开发者处理JSON数据的强大工具,它可以方便地进行Java对象与JSON之间的转换,以及JSON与XML之间的互操作,简化了数据交换和处理的复杂性。在实际项目中,根据需求选择合适的版本和配置,...
本教程将深入探讨JSON与Java之间的数据转换,包括JSON对象到Java对象以及Java对象到JSON对象的转换。 首先,为了进行JSON操作,我们需要导入相应的库。在Java中,我们以Jackson库为例,添加以下依赖到项目中: ```...
本篇文章将详细讲解如何在Java中使用`json-lib`库进行JSON与Java对象之间的相互转换,并提供相关的jar包列表。 首先,`json-lib`是一个非常流行的Java JSON库,它提供了多种Java数据类型与JSON之间的转换功能,包括...
Java解析JSON文件是Java开发中常见的一项任务,特别是在与Web服务交互或处理API响应时。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,因其简洁和易于阅读及编写的特点,被广泛应用于网络数据传输...
Java JSON.jar.zip是一个压缩包,其中包含了一个名为`java-json.jar`的Java库,这个库主要功能是处理XML和JSON之间的转换。XML(Extensible Markup Language)和JSON(JavaScript Object Notation)是两种广泛用于...
这个"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 和...
2. Jackson库:Jackson是另一个广泛使用的Java JSON库,提供了`ObjectMapper`类来处理JSON转换。`ObjectMapper.writeValueAsString()`用于对象转JSON,`ObjectMapper.readValue()`用于JSON转对象。 3. org.json库:...
Java Bean转换为Json Schema是一种常见的数据转换操作,特别是在开发基于RESTful API的Web服务时,因为JSON Schema提供了数据验证和文档化的功能。Java Bean是Java编程中的一个概念,它是一类具有特定规则的POJO...
Java与JSON之间的互操作是指在Java程序中对JSON(JavaScript Object Notation)数据进行解析、序列化和反序列化的过程。JSON是一种轻量级的数据交换格式,它易于人阅读和编写,同时也易于机器解析和生成。在Java中,...
JSON经常用于服务器与Web应用之间传输数据,其结构简洁,格式为键值对集合,易于计算机处理,同时也便于人类阅读和编写。 WebService是一种可以通过Web提供的服务,它使用XML消息传递进行通信。WebService技术可以...
在这个方法中,我们创建了一个`ObjectMapper`实例,它是Jackson库的核心类,用于进行JSON与Java对象之间的映射。`readValue`方法接受两个参数:一个是JSON文件的路径,另一个是目标类型,这里是`Map.class`。 现在...
总之,Java与JSON之间的转换是通过各种库实现的,每个库都有其特点和优势。选择哪个库取决于项目需求,如性能、易用性、社区支持等因素。在实际开发中,理解并熟练运用这些库的API,能有效地提高开发效率和代码质量...
5. **XML与JSON转换**:JSON-lib还提供了`XMLSerializer`类,用于XML与JSON之间的转换。你可以使用`XMLSerializer.toXML()`方法将JSON对象转换为XML字符串,反之,使用`XMLSerializer.fromXML()`方法将XML字符串解析...