搜索
首页后端开发XML/RSS教程JSON-lib框架,转换JSON、XML不再困难

Json-lib可以将Java对象转成json格式的字符串,也可以将Java对象转换成xml格式的文档,同样可以将json字符串转换成Java对象或是将xml字符串转换成Java对象。

一、 准备工作 

 

1、 首先要去官方下载json-lib工具包

下载地址:

http://www.php.cn/

目前最新的是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://www.php.cn/

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

clip_image002

当然你也可以用2.4的json-lib库

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

http://www.php.cn/

由于本次介绍的示例需要junit工具,所以你还需要添加junit的jar文件,版本是4.8.2版本的,下载地址:http://www.php.cn/

如果你还不了解JSON是什么?那么你应该可以看看http://www.php.cn/

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


package com.hoo.entity;
 <br>
public class Student {
    private int id;
    private String name;
    private String email;
    private String address;
    private Birthday birthday;
 <br>
    //setter、getter
    public String toString() {
        return this.name + "#" + this.id + "#" + this.address + "#" + this.birthday + "#" + this.email;
    }
}
 <br>

Birthday.java


package com.hoo.entity;
 <br>
public class Birthday {
    private String birthday;
    <br>
    public Birthday(String birthday) {
        super();
        this.birthday = birthday;
    }
    //setter、getter
    public Birthday() {}
    <br>
    @Override
    public String toString() {
        return this.birthday;
    }
}

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

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


package com.hoo.test;
 <br>
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;
 <br>
/**
 * a4b561c25d9afb9ac8dc4d70affff419function:0d36329ec37a2cc24d42c7229b69747a 用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://www.php.cn/
 * @email hoojo_@126.com
 * @version 1.0
 */
@SuppressWarnings({ "deprecation", "unchecked" })
public class JsonlibTest {
    private JSONArray jsonArray = null;
    private JSONObject jsonObject = null;
    <br>
    private Student bean = null;
    <br>
    @Before
    public void init() {
        jsonArray = new JSONArray();
        jsonObject = new JSONObject();
        <br>
        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);
    }
    <br>
    @After
    public void destory() {
        jsonArray = null;
        jsonObject = null;
        bean = null;
        System.gc();
    }
    <br>
    public final void fail(String string) {
        System.out.println(string);
    }
    <br>
    public final void failRed(String string) {
        System.err.println(string);
    }
    <br>
}

上面的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.php.cn/

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

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

1、 将JavaObject转换吃JSON字符串

在JsonlibTest中添加如下代码:


/*=========================Java Object >>>> JSON String ===========================*/
/**
 * a4b561c25d9afb9ac8dc4d70affff419function:0d36329ec37a2cc24d42c7229b69747a转Java Bean对象到JSON
 * @author hoojo
 * @createDate Nov 28, 2010 2:35:54 PM
 */
@Test
public void writeEntity2JSON() {
    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());
    <br>
    fail("========================JsonConfig========================");
    JsonConfig jsonConfig = new JsonConfig();
    jsonConfig.registerJsonValueProcessor(Birthday.class, new JsonValueProcessor() {
        public Object processArrayValue(Object value, JsonConfig jsonConfig) {
            if (value == null) {
                return new Date();
            }
            return value;
        }
 <br>
        public Object processObjectValue(String key, Object value, JsonConfig jsonConfig) {
            fail("key:" + key);
            return value + "##修改过的日期";
        }
 <br>
    });
    jsonObject = JSONObject.fromObject(bean, jsonConfig);
    <br>
    fail(jsonObject.toString());
    Student student = (Student) JSONObject.toBean(jsonObject, Student.class);
    fail(jsonObject.getString("birthday"));
    fail(student.toString());
    <br>
    fail("#####################JsonPropertyFilter############################");
    jsonConfig.setJsonPropertyFilter(new PropertyFilter() {
        public boolean 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() {
        public boolean 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 >>> JSON Object==================
{"address":"address","birthday":{"birthday":"2010-11-22"},"email":"email","id":1,"name":"haha"}
==============Java Bean >>> JSON Array==================
[{"address":"address","birthday":{"birthday":"2010-11-22"},"email":"email","id":1,"name":"haha"}]
==============Java Bean >>> JSON Object ==================
{"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字符串


/**
 * a4b561c25d9afb9ac8dc4d70affff419function:0d36329ec37a2cc24d42c7229b69747a转换Java List集合到JSON
 * @author hoojo
 * @createDate Nov 28, 2010 2:36:15 PM
 */
@Test
public void writeList2JSON() {
    fail("==============Java List >>> JSON Array==================");
    List1f479e44f2c9bd2301ecbd2b69e4d7bf stu = new ArrayList1f479e44f2c9bd2301ecbd2b69e4d7bf();
    stu.add(bean);
    bean.setName("jack");
    stu.add(bean);
    fail(JSONArray.fromObject(stu).toString());
    fail(JSONSerializer.toJSON(stu).toString());
}

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


==============Java List >>> JSON Array==================
[{"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对象


/**
 * a4b561c25d9afb9ac8dc4d70affff419function:0d36329ec37a2cc24d42c7229b69747a转Java Map对象到JSON
 * @author hoojo
 * @createDate Nov 28, 2010 2:37:35 PM
 */
@Test
public void writeMap2JSON() {
    Map14bd1badcdee783757181db757c9943f map = new HashMap14bd1badcdee783757181db757c9943f();
    map.put("A", bean);
    <br>
    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 >>> JSON Object==================
{"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){ return this.arr[i]; },"bool":true}
==============Java Map >>> JSON Array ==================
[{"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){ return this.arr[i]; },"bool":true}]
==============Java Map >>> JSON Object==================
{"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){ return this.arr[i]; },"bool":true}

4、 将更多类型转换成JSON


/**
 * a4b561c25d9afb9ac8dc4d70affff419function:0d36329ec37a2cc24d42c7229b69747a  转换更多数组类型到JSON
 * @author hoojo
 * @createDate Nov 28, 2010 2:39:19 PM
 */
@Test
public void writeObject2JSON() {
    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':'is easy'}").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());
    <br>
    fail("==============Java JSONArray >>> JSON ==================");
    jsonArray = new JSONArray()
        .element( "JSON" )
        .element( "1" )
        .element( "2.0" )
        .element( "true" );
    fail(JSONSerializer.toJSON(jsonArray).toString());
    <br>
    fail("==============Java JSONArray JsonConfig#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]);
    <br>
    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":"is easy"}
["json","is","easy"]
==============Java JSONObject >>> JSON ==================
{"string":"JSON","integer":"1","double":"2.0","boolean":"true"}
==============Java JSONArray >>> JSON ==================
["JSON","1","2.0","true"]
==============Java JSONArray JsonConfig#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\"}";
/**
 * a4b561c25d9afb9ac8dc4d70affff419function:0d36329ec37a2cc24d42c7229b69747a将json字符串转化为java对象
 * @author hoojo
 * @createDate Nov 28, 2010 3:01:16 PM
 */
@Test
public void readJSON2Bean() {
    fail("==============JSON Object String >>> Java Bean ==================");
    jsonObject = JSONObject.fromObject(json);
    Student stu = (Student) JSONObject.toBean(jsonObject, Student.class);
    fail(stu.toString());
}

运行后,结果如下:


==============JSON Object 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\"}";
 <br>
@Test
public void readJSON2DynaBean() {
    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可以获得指定的属性的值。

运行后结果如下:


==============JSON Object 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\"}";
 <br>
@Test
public void readJSON2Array() {
    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);
        <br>
        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();
    }
}

运行的结果如下:


==============JSON Arry 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\"}";
 <br>
@Test
public void readJSON2List() {
    try {
        fail("==============JSON Arry String >>> Java List ==================");
        json = "[" + json + "]";
        jsonArray = JSONArray.fromObject(json);
        List1f479e44f2c9bd2301ecbd2b69e4d7bf list = JSONArray.toList(jsonArray, Student.class);
        System.out.println(list.size());
        System.out.println(list.get(0));
        <br>
        list = JSONArray.toList(jsonArray);
        System.out.println(list.size());
        System.out.println(list.get(0));//MorphDynaBean
    } catch (Exception e) {
        e.printStackTrace();
    }
}

运行后结果如下:


==============JSON Arry 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\"}";
 <br>
@Test
public void readJSON2Collection() {
    try {
        fail("==============JSON Arry String >>> Java Collection ==================");
        json = "[" + json + "]";
        jsonArray = JSONArray.fromObject(json);
        Collection1f479e44f2c9bd2301ecbd2b69e4d7bf con = JSONArray.toCollection(jsonArray, Student.class);
        System.out.println(con.size());
        Object[] stt = con.toArray();
        System.out.println(stt.length);
        fail(stt[0].toString());
        <br>
    } catch (Exception e) {
        e.printStackTrace();
    }
}

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


==============JSON Arry String >>> Java Collection ==================
1
1
tom#22#chian#2010-11-22#email@123.com

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


@Test
public void readJSON2Map() {
    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);
        Map4b270fece8554c56e0c546fb287379f6> clazzMap = new HashMap4b270fece8554c56e0c546fb287379f6>();
        clazzMap.put("arr", String[].class);
        clazzMap.put("A", Student.class);
        clazzMap.put("B", Student.class);
        Map749f4b398e25b35f4b52b79331e21f69 mapBean = (Map) JSONObject.toBean(jsonObject, Map.class, clazzMap);
        System.out.println(mapBean);
        <br>
        Setf7e83be87db5cd2d9a8a0b8117b38cd4 set = mapBean.keySet();
        Iteratorf7e83be87db5cd2d9a8a0b8117b38cd4 iter = set.iterator();
        while (iter.hasNext()) {
            String key = iter.next();
            fail(key + ":" + mapBean.get(key).toString());
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

运行后结果如下:


==============JSON Arry 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的支持

1、 将Java对象到XML


/*============================Java Object >>>>> XML ==========================*/
/**
 * a4b561c25d9afb9ac8dc4d70affff419function:0d36329ec37a2cc24d42c7229b69747a 转换Java对象到XML
 * 需要额外的jar包:xom.jar
 * @author hoojo
 * @createDate Nov 28, 2010 2:39:55 PM
 */
@Test
public void writeObject2XML() {
    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 ==================
<?xml version="1.0" encoding="UTF-8"?>
<a><e class="object">
<address type="string">address</address><birthday class="object"><birthday type="string">2010-11-22</birthday></birthday>
<email type="string">email</email><id type="number">1</id><name type="string">haha</name>
</e></a>
 
==============Java String Array >>> XML ==================
<?xml version="1.0" encoding="UTF-8"?>
<a><e type="string">a</e><e type="string">b</e><e type="string">c</e></a>
 
==============Java boolean Array >>> XML ==================
<?xml version="1.0" encoding="UTF-8"?>
<a><e type="boolean">true</e><e type="boolean">false</e><e type="boolean">true</e></a>
 
<?xml version="1.0" encoding="UTF-8"?>
<a><e type="boolean">true</e><e type="boolean">false</e><e type="boolean">true</e></a>
 
==============Java Object Array >>> JSON Array ==================
<?xml version="1.0" encoding="UTF-8"?>
<a><e type="number">1</e><e type="string">a</e><e type="boolean">true</e><e type="string">A</e><e class="array">
<e type="string">a</e><e type="string">b</e><e type="string">c</e></e><e class="array"><e type="boolean">true</e>
<e type="boolean">false</e><e type="boolean">true</e></e></a>
 
<?xml version="1.0" encoding="UTF-8"?>
<a><e type="number">1</e><e type="string">a</e><e type="boolean">true</e><e type="string">A</e><e class="array">
<e type="string">a</e><e type="string">b</e><e type="string">c</e></e><e class="array"><e type="boolean">true</e>
<e type="boolean">false</e><e type="boolean">true</e></e></a>
 
==============Java String >>> JSON ==================
<?xml version="1.0" encoding="UTF-8"?>
<a><e type="string">json</e><e type="string">is</e><e type="string">easy</e></a>
 
<?xml version="1.0" encoding="UTF-8"?>
<o><json type="string">is easy</json></o>
 
<?xml version="1.0" encoding="UTF-8"?>
<a><e type="string">json</e><e type="string">is</e><e type="string">easy</e></a>

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

2、 将XML转换成Java对象


/*============================XML String >>>>> Java Object ==========================*/
/**
 * a4b561c25d9afb9ac8dc4d70affff419function:0d36329ec37a2cc24d42c7229b69747a转换xml文档到java对象
 * @author hoojo
 * @createDate Nov 28, 2010 3:00:27 PM
 */
@Test
public void readXML2Object() {
    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());
    <br>
    String[] s = (String[]) JSONArray.toArray(jsonArray, String.class);
    fail(s[0].toString());
    <br>
    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]);
    <br>
    jsonArray = (JSONArray) xmlSerializer.read(xmlSerializer.write(JSONSerializer.toJSON(bo)));
    bo = (boolean[]) JSONArray.toArray(jsonArray, boolean.class);
    fail(bo.toString());
    System.out.println(bo[0]);
    <br>
    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));
    <br>
    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 >>>> Java String 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
public void testReadXml2Array() {
    String str = "edf8e0053e78db14c8178324978e0a86" +
          "1442d07ab3be868fd53fedf9ee0035ee" +
          "return matrix[i][j];" +
          "b0629d265c32e2748cb614bc77d7c36b" +
        "5db79b134e9f6b82c0b36e0489ee08ed";
    JSONArray json = (JSONArray) new XMLSerializer().read(str);
    fail(json.toString());
}

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


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

就是一个数组;

 以上就是JSON-lib框架,转换JSON、XML不再困难的内容,更多相关内容请关注PHP中文网(www.php.cn)!


声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
XML中的RSS:解码标签,属性和结构XML中的RSS:解码标签,属性和结构Apr 24, 2025 am 12:09 AM

RSS是一种基于XML的格式,用于发布和订阅内容。RSS文件的XML结构包括根元素、元素和多个元素,每个代表一个内容条目。通过XML解析器读取和解析RSS文件,用户可以订阅并获取最新内容。

XML在RSS中的优势:技术深度潜水XML在RSS中的优势:技术深度潜水Apr 23, 2025 am 12:02 AM

XML在RSS中具有结构化数据、可扩展性、跨平台兼容性和解析验证的优势。1)结构化数据确保内容的一致性和可靠性;2)可扩展性允许添加自定义标签以适应内容需求;3)跨平台兼容性使其在不同设备上无缝工作;4)解析和验证工具确保Feed的质量和完整性。

XML中的RSS:揭示内容联合的核心XML中的RSS:揭示内容联合的核心Apr 22, 2025 am 12:08 AM

RSS在XML中的实现方式是通过结构化的XML格式来组织内容。1)RSS使用XML作为数据交换格式,包含频道信息和项目列表等元素。2)生成RSS文件需按规范组织内容,发布到服务器供订阅。3)RSS文件可通过阅读器或插件订阅,实现内容自动更新。

超越基础:高级RSS文档功能超越基础:高级RSS文档功能Apr 21, 2025 am 12:03 AM

RSS的高级功能包括内容命名空间、扩展模块和条件订阅。1)内容命名空间扩展RSS功能,2)扩展模块如DublinCore或iTunes添加元数据,3)条件订阅根据特定条件筛选条目。这些功能通过添加XML元素和属性实现,提升信息获取效率。

XML主链:RSS提要如何结构XML主链:RSS提要如何结构Apr 20, 2025 am 12:02 AM

rssfeedsusexmltoStructureContentUpdates.1)xmlProvidesHierarchicalStructurefordata.2)theelementDefinestHefEed'sIdentityAndContainsElements.3)ElementsRementsRementsRepresSentividividividualContentpieces.4)rsssissisexisextensible,允许custemements.5)5)

RSS和XML:了解Web内容的动态二重奏RSS和XML:了解Web内容的动态二重奏Apr 19, 2025 am 12:03 AM

RSS和XML是用于网络内容管理的工具。RSS用于发布和订阅内容,XML用于存储和传输数据。它们的工作原理包括内容发布、订阅和更新推送。使用示例包括RSS发布博客文章和XML存储书籍信息。

RSS文档:Web联合组织的基础RSS文档:Web联合组织的基础Apr 18, 2025 am 12:04 AM

RSS文档是基于XML的结构化文件,用于发布和订阅频繁更新的内容。它的主要作用包括:1)自动化内容更新,2)内容聚合,3)提高浏览效率。通过RSSfeed,用户可以订阅并及时获取来自不同来源的最新信息。

解码RSS:内容提要的XML结构解码RSS:内容提要的XML结构Apr 17, 2025 am 12:09 AM

RSS的XML结构包括:1.XML声明和RSS版本,2.频道(Channel),3.条目(Item)。这些部分构成了RSS文件的基础,允许用户通过解析XML数据来获取和处理内容信息。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)