Rumah pembangunan bahagian belakang Tutorial XML/RSS JSON-lib框架,转换JSON、XML不再困难

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

Feb 18, 2017 pm 03:10 PM

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;
Salin selepas log masuk
Salin selepas log masuk
 <br>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
public class Student {
Salin selepas log masuk
    private int id;
Salin selepas log masuk
    private String name;
Salin selepas log masuk
    private String email;
Salin selepas log masuk
    private String address;
Salin selepas log masuk
    private Birthday birthday;
Salin selepas log masuk
 <br>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
    //setter、getter
Salin selepas log masuk
Salin selepas log masuk
    public String toString() {
Salin selepas log masuk
        return this.name + "#" + this.id + "#" + this.address + "#" + this.birthday + "#" + this.email;
Salin selepas log masuk
    }
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
}
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
 <br>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Birthday.java


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

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

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


package com.hoo.test;
Salin selepas log masuk
 <br>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
import java.lang.reflect.InvocationTargetException;
Salin selepas log masuk
import java.util.ArrayList;
Salin selepas log masuk
import java.util.Collection;
Salin selepas log masuk
import java.util.Date;
Salin selepas log masuk
import java.util.HashMap;
Salin selepas log masuk
import java.util.Iterator;
Salin selepas log masuk
import java.util.List;
Salin selepas log masuk
import java.util.Map;
Salin selepas log masuk
import java.util.Set;
Salin selepas log masuk
import net.sf.json.JSON;
Salin selepas log masuk
import net.sf.json.JSONArray;
Salin selepas log masuk
import net.sf.json.JSONFunction;
Salin selepas log masuk
import net.sf.json.JSONObject;
Salin selepas log masuk
import net.sf.json.JSONSerializer;
Salin selepas log masuk
import net.sf.json.JsonConfig;
Salin selepas log masuk
import net.sf.json.processors.JsonValueProcessor;
Salin selepas log masuk
import net.sf.json.util.PropertyFilter;
Salin selepas log masuk
import net.sf.json.xml.XMLSerializer;
Salin selepas log masuk
import org.apache.commons.beanutils.PropertyUtils;
Salin selepas log masuk
import org.junit.After;
Salin selepas log masuk
import org.junit.Before;
Salin selepas log masuk
import org.junit.Test;
Salin selepas log masuk
import com.hoo.entity.Birthday;
Salin selepas log masuk
import com.hoo.entity.Student;
Salin selepas log masuk
 <br>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
/**
Salin selepas log masuk
Salin selepas log masuk
 * <b>function:</b> 用json-lib转换java对象到JSON字符串
Salin selepas log masuk
 * 读取json字符串到java对象,序列化jsonObject到xml
Salin selepas log masuk
 * json-lib-version: json-lib-2.3-jdk15.jar
Salin selepas log masuk
 * 依赖包:
Salin selepas log masuk
 * commons-beanutils.jar
Salin selepas log masuk
 * commons-collections-3.2.jar
Salin selepas log masuk
 * ezmorph-1.0.3.jar
Salin selepas log masuk
 * commons-lang.jar
Salin selepas log masuk
 * commons-logging.jar
Salin selepas log masuk
 * @author hoojo
Salin selepas log masuk
Salin selepas log masuk
 * @createDate Nov 28, 2010 2:28:39 PM
Salin selepas log masuk
 * @file JsonlibTest.java
Salin selepas log masuk
 * @package com.hoo.test
Salin selepas log masuk
 * @project WebHttpUtils
Salin selepas log masuk
 * @blog http://www.php.cn/
Salin selepas log masuk
 * @email hoojo_@126.com
Salin selepas log masuk
 * @version 1.0
Salin selepas log masuk
 */
Salin selepas log masuk
Salin selepas log masuk
@SuppressWarnings({ "deprecation", "unchecked" })
Salin selepas log masuk
public class JsonlibTest {
Salin selepas log masuk
    private JSONArray jsonArray = null;
Salin selepas log masuk
    private JSONObject jsonObject = null;
Salin selepas log masuk
    <br>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
    private Student bean = null;
Salin selepas log masuk
    <br>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
    @Before
Salin selepas log masuk
    public void init() {
Salin selepas log masuk
        jsonArray = new JSONArray();
Salin selepas log masuk
        jsonObject = new JSONObject();
Salin selepas log masuk
        <br>
Salin selepas log masuk
        bean = new Student();
Salin selepas log masuk
        bean.setAddress("address");
Salin selepas log masuk
        bean.setEmail("email");
Salin selepas log masuk
        bean.setId(1);
Salin selepas log masuk
        bean.setName("haha");
Salin selepas log masuk
        Birthday day = new Birthday();
Salin selepas log masuk
        day.setBirthday("2010-11-22");
Salin selepas log masuk
        bean.setBirthday(day);
Salin selepas log masuk
    }
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
    <br>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
    @After
Salin selepas log masuk
    public void destory() {
Salin selepas log masuk
        jsonArray = null;
Salin selepas log masuk
        jsonObject = null;
Salin selepas log masuk
        bean = null;
Salin selepas log masuk
        System.gc();
Salin selepas log masuk
    }
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
    <br>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
    public final void fail(String string) {
Salin selepas log masuk
        System.out.println(string);
Salin selepas log masuk
    }
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
    <br>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
    public final void failRed(String string) {
Salin selepas log masuk
        System.err.println(string);
Salin selepas log masuk
    }
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
    <br>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
}
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

上面的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 ===========================*/
Salin selepas log masuk
/**
Salin selepas log masuk
Salin selepas log masuk
 * <b>function:</b>转Java Bean对象到JSON
Salin selepas log masuk
 * @author hoojo
Salin selepas log masuk
Salin selepas log masuk
 * @createDate Nov 28, 2010 2:35:54 PM
Salin selepas log masuk
 */
Salin selepas log masuk
Salin selepas log masuk
@Test
Salin selepas log masuk
public void writeEntity2JSON() {
Salin selepas log masuk
    fail("==============Java Bean >>> JSON Object==================");
Salin selepas log masuk
    fail(JSONObject.fromObject(bean).toString());
Salin selepas log masuk
    fail("==============Java Bean >>> JSON Array==================");
Salin selepas log masuk
    fail(JSONArray.fromObject(bean).toString());//array会在最外层套上[]
Salin selepas log masuk
    fail("==============Java Bean >>> JSON Object ==================");
Salin selepas log masuk
    fail(JSONSerializer.toJSON(bean).toString());
Salin selepas log masuk
    <br>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
    fail("========================JsonConfig========================");
Salin selepas log masuk
    JsonConfig jsonConfig = new JsonConfig();
Salin selepas log masuk
Salin selepas log masuk
    jsonConfig.registerJsonValueProcessor(Birthday.class, new JsonValueProcessor() {
Salin selepas log masuk
        public Object processArrayValue(Object value, JsonConfig jsonConfig) {
Salin selepas log masuk
            if (value == null) {
Salin selepas log masuk
                return new Date();
Salin selepas log masuk
            }
Salin selepas log masuk
Salin selepas log masuk
            return value;
Salin selepas log masuk
        }
Salin selepas log masuk
Salin selepas log masuk
 <br>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
        public Object processObjectValue(String key, Object value, JsonConfig jsonConfig) {
Salin selepas log masuk
            fail("key:" + key);
Salin selepas log masuk
            return value + "##修改过的日期";
Salin selepas log masuk
        }
Salin selepas log masuk
Salin selepas log masuk
 <br>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
    });
Salin selepas log masuk
Salin selepas log masuk
    jsonObject = JSONObject.fromObject(bean, jsonConfig);
Salin selepas log masuk
    <br>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
    fail(jsonObject.toString());
Salin selepas log masuk
    Student student = (Student) JSONObject.toBean(jsonObject, Student.class);
Salin selepas log masuk
    fail(jsonObject.getString("birthday"));
Salin selepas log masuk
    fail(student.toString());
Salin selepas log masuk
    <br>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
    fail("#####################JsonPropertyFilter############################");
Salin selepas log masuk
    jsonConfig.setJsonPropertyFilter(new PropertyFilter() {
Salin selepas log masuk
        public boolean apply(Object source, String name, Object value) {
Salin selepas log masuk
            fail(source + "%%%" + name + "--" + value);
Salin selepas log masuk
            //忽略birthday属性
Salin selepas log masuk
            if (value != null && Birthday.class.isAssignableFrom(value.getClass())) {
Salin selepas log masuk
                return true;
Salin selepas log masuk
            }
Salin selepas log masuk
Salin selepas log masuk
            return false;
Salin selepas log masuk
        }
Salin selepas log masuk
Salin selepas log masuk
    });
Salin selepas log masuk
Salin selepas log masuk
    fail(JSONObject.fromObject(bean, jsonConfig).toString());
Salin selepas log masuk
    fail("#################JavaPropertyFilter##################");
Salin selepas log masuk
    jsonConfig.setRootClass(Student.class);
Salin selepas log masuk
    jsonConfig.setJavaPropertyFilter(new PropertyFilter() {
Salin selepas log masuk
        public boolean apply(Object source, String name, Object value) {
Salin selepas log masuk
            fail(name + "@" + value + "#" + source);
Salin selepas log masuk
            if ("id".equals(name) || "email".equals(name)) {
Salin selepas log masuk
                value = name + "@@";
Salin selepas log masuk
                return true;
Salin selepas log masuk
            }
Salin selepas log masuk
            return false;
Salin selepas log masuk
        }
Salin selepas log masuk
Salin selepas log masuk
    });
Salin selepas log masuk
    //jsonObject = JSONObject.fromObject(bean, jsonConfig);
Salin selepas log masuk
    //student = (Student) JSONObject.toBean(jsonObject, Student.class);
Salin selepas log masuk
    //fail(student.toString());
Salin selepas log masuk
    student = (Student) JSONObject.toBean(jsonObject, jsonConfig);
Salin selepas log masuk
    fail("Student:" + student.toString());
Salin selepas log masuk
}
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

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

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

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

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


==============Java Bean >>> JSON Object==================
Salin selepas log masuk
{"address":"address","birthday":{"birthday":"2010-11-22"},"email":"email","id":1,"name":"haha"}
Salin selepas log masuk
Salin selepas log masuk
==============Java Bean >>> JSON Array==================
Salin selepas log masuk
[{"address":"address","birthday":{"birthday":"2010-11-22"},"email":"email","id":1,"name":"haha"}]
Salin selepas log masuk
==============Java Bean >>> JSON Object ==================
Salin selepas log masuk
{"address":"address","birthday":{"birthday":"2010-11-22"},"email":"email","id":1,"name":"haha"}
Salin selepas log masuk
Salin selepas log masuk
========================JsonConfig========================
Salin selepas log masuk
key:birthday
Salin selepas log masuk
{"address":"address","birthday":"2010-11-22##修改过的日期","email":"email","id":1,"name":"haha"}
Salin selepas log masuk
2010-11-22##修改过的日期
Salin selepas log masuk
haha#1#address#null#email
Salin selepas log masuk
#####################JsonPropertyFilter############################
Salin selepas log masuk
haha#1#address#2010-11-22#email%%%address--address
Salin selepas log masuk
haha#1#address#2010-11-22#email%%%birthday--2010-11-22
Salin selepas log masuk
haha#1#address#2010-11-22#email%%%email--email
Salin selepas log masuk
haha#1#address#2010-11-22#email%%%id--1
Salin selepas log masuk
haha#1#address#2010-11-22#email%%%name--haha
Salin selepas log masuk
{"address":"address","email":"email","id":1,"name":"haha"}
Salin selepas log masuk
#################JavaPropertyFilter##################
Salin selepas log masuk
address@address#null#0#null#null#null
Salin selepas log masuk
birthday@2010-11-22##修改过的日期#null#0#address#null#null
Salin selepas log masuk
email@email#null#0#address#null#null
Salin selepas log masuk
id@1#null#0#address#null#null
Salin selepas log masuk
name@haha#null#0#address#null#null
Salin selepas log masuk
Student:haha#0#address#null#null
Salin selepas log masuk

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


/**
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
 * <b>function:</b>转换Java List集合到JSON
Salin selepas log masuk
 * @author hoojo
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
 * @createDate Nov 28, 2010 2:36:15 PM
Salin selepas log masuk
 */
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
@Test
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
public void writeList2JSON() {
Salin selepas log masuk
    fail("==============Java List >>> JSON Array==================");
Salin selepas log masuk
    List<Student> stu = new ArrayList<Student>();
Salin selepas log masuk
    stu.add(bean);
Salin selepas log masuk
Salin selepas log masuk
    bean.setName("jack");
Salin selepas log masuk
Salin selepas log masuk
    stu.add(bean);
Salin selepas log masuk
Salin selepas log masuk
    fail(JSONArray.fromObject(stu).toString());
Salin selepas log masuk
    fail(JSONSerializer.toJSON(stu).toString());
Salin selepas log masuk
}
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

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


==============Java List >>> JSON Array==================
Salin selepas log masuk
[{"address":"address","birthday":{"birthday":"2010-11-22"},"email":"email","id":1,"name":"jack"},
Salin selepas log masuk
Salin selepas log masuk
{"address":"address","birthday":{"birthday":"2010-11-22"},"email":"email","id":1,"name":"jack"}]
Salin selepas log masuk
Salin selepas log masuk
[{"address":"address","birthday":{"birthday":"2010-11-22"},"email":"email","id":1,"name":"jack"},
Salin selepas log masuk
Salin selepas log masuk
{"address":"address","birthday":{"birthday":"2010-11-22"},"email":"email","id":1,"name":"jack"}]
Salin selepas log masuk
Salin selepas log masuk

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

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


/**
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
 * <b>function:</b>转Java Map对象到JSON
Salin selepas log masuk
 * @author hoojo
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
 * @createDate Nov 28, 2010 2:37:35 PM
Salin selepas log masuk
 */
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
@Test
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
public void writeMap2JSON() {
Salin selepas log masuk
    Map<String, Object> map = new HashMap<String, Object>();
Salin selepas log masuk
    map.put("A", bean);
Salin selepas log masuk
    <br>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
    bean.setName("jack");
Salin selepas log masuk
Salin selepas log masuk
    map.put("B", bean);
Salin selepas log masuk
    map.put("name", "json");
Salin selepas log masuk
    map.put("bool", Boolean.TRUE);
Salin selepas log masuk
    map.put("int", new Integer(1));
Salin selepas log masuk
    map.put("arr", new String[] { "a", "b" });
Salin selepas log masuk
    map.put("func", "function(i){ return this.arr[i]; }");
Salin selepas log masuk
    fail("==============Java Map >>> JSON Object==================");
Salin selepas log masuk
Salin selepas log masuk
    fail(JSONObject.fromObject(map).toString());
Salin selepas log masuk
    fail("==============Java Map >>> JSON Array ==================");
Salin selepas log masuk
    fail(JSONArray.fromObject(map).toString());
Salin selepas log masuk
    fail("==============Java Map >>> JSON Object==================");
Salin selepas log masuk
Salin selepas log masuk
    fail(JSONSerializer.toJSON(map).toString());
Salin selepas log masuk
}
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

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

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


==============Java Map >>> JSON Object==================
Salin selepas log masuk
{"arr":["a","b"],"A":{"address":"address","birthday":{"birthday":"2010-11-22"},"email":"email","id":1,"name":"jack"},"int":1,
Salin selepas log masuk
Salin selepas log masuk
"B":{"address":"address","birthday":{"birthday":"2010-11-22"},"email":"email","id":1,"name":"jack"},"name":"json",
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
"func":function(i){ return this.arr[i]; },"bool":true}
Salin selepas log masuk
Salin selepas log masuk
==============Java Map >>> JSON Array ==================
Salin selepas log masuk
[{"arr":["a","b"],"A":{"address":"address","birthday":{"birthday":"2010-11-22"},"email":"email","id":1,"name":"jack"},"int":1,
Salin selepas log masuk
"B":{"address":"address","birthday":{"birthday":"2010-11-22"},"email":"email","id":1,"name":"jack"},"name":"json",
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
"func":function(i){ return this.arr[i]; },"bool":true}]
Salin selepas log masuk
==============Java Map >>> JSON Object==================
Salin selepas log masuk
{"arr":["a","b"],"A":{"address":"address","birthday":{"birthday":"2010-11-22"},"email":"email","id":1,"name":"jack"},"int":1,
Salin selepas log masuk
Salin selepas log masuk
"B":{"address":"address","birthday":{"birthday":"2010-11-22"},"email":"email","id":1,"name":"jack"},"name":"json",
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
"func":function(i){ return this.arr[i]; },"bool":true}
Salin selepas log masuk
Salin selepas log masuk

4、 将更多类型转换成JSON


/**
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
 * <b>function:</b>  转换更多数组类型到JSON
Salin selepas log masuk
 * @author hoojo
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
 * @createDate Nov 28, 2010 2:39:19 PM
Salin selepas log masuk
 */
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
@Test
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
public void writeObject2JSON() {
Salin selepas log masuk
    String[] sa = {"a", "b", "c"};
Salin selepas log masuk
    fail("==============Java StringArray >>> JSON Array ==================");
Salin selepas log masuk
    fail(JSONArray.fromObject(sa).toString());
Salin selepas log masuk
    fail(JSONSerializer.toJSON(sa).toString());
Salin selepas log masuk
    fail("==============Java boolean Array >>> JSON Array ==================");
Salin selepas log masuk
    boolean[] bo = { true, false, true };
Salin selepas log masuk
    fail(JSONArray.fromObject(bo).toString());
Salin selepas log masuk
    fail(JSONSerializer.toJSON(bo).toString());
Salin selepas log masuk
    Object[] o = { 1, "a", true, 'A', sa, bo };
Salin selepas log masuk
    fail("==============Java Object Array >>> JSON Array ==================");
Salin selepas log masuk
    fail(JSONArray.fromObject(o).toString());
Salin selepas log masuk
    fail(JSONSerializer.toJSON(o).toString());
Salin selepas log masuk
    fail("==============Java String >>> JSON ==================");
Salin selepas log masuk
    fail(JSONArray.fromObject("['json','is','easy']").toString());
Salin selepas log masuk
    fail(JSONObject.fromObject("{'json':'is easy'}").toString());
Salin selepas log masuk
    fail(JSONSerializer.toJSON("['json','is','easy']").toString());
Salin selepas log masuk
    fail("==============Java JSONObject >>> JSON ==================");
Salin selepas log masuk
    jsonObject = new JSONObject()
Salin selepas log masuk
        .element("string", "JSON")
Salin selepas log masuk
        .element("integer", "1")
Salin selepas log masuk
        .element("double", "2.0")
Salin selepas log masuk
        .element("boolean", "true");
Salin selepas log masuk
    fail(JSONSerializer.toJSON(jsonObject).toString());
Salin selepas log masuk
    <br>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
    fail("==============Java JSONArray >>> JSON ==================");
Salin selepas log masuk
    jsonArray = new JSONArray()
Salin selepas log masuk
        .element( "JSON" )
Salin selepas log masuk
        .element( "1" )
Salin selepas log masuk
        .element( "2.0" )
Salin selepas log masuk
        .element( "true" );
Salin selepas log masuk
    fail(JSONSerializer.toJSON(jsonArray).toString());
Salin selepas log masuk
    <br>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
    fail("==============Java JSONArray JsonConfig#setArrayMode >>> JSON ==================");
Salin selepas log masuk
    List input = new ArrayList();
Salin selepas log masuk
    input.add("JSON");
Salin selepas log masuk
    input.add("1");
Salin selepas log masuk
    input.add("2.0");
Salin selepas log masuk
    input.add("true");
Salin selepas log masuk
    JSONArray jsonArray = (JSONArray) JSONSerializer.toJSON( input );
Salin selepas log masuk
    JsonConfig jsonConfig = new JsonConfig();
Salin selepas log masuk
Salin selepas log masuk
    jsonConfig.setArrayMode( JsonConfig.MODE_OBJECT_ARRAY );
Salin selepas log masuk
    Object[] output = (Object[]) JSONSerializer.toJava(jsonArray, jsonConfig);
Salin selepas log masuk
    System.out.println(output[0]);
Salin selepas log masuk
    <br>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
    fail("==============Java JSONFunction >>> JSON ==================");
Salin selepas log masuk
    String str = "{'func': function( param ){ doSomethingWithParam(param); }}";
Salin selepas log masuk
    JSONObject jsonObject = (JSONObject) JSONSerializer.toJSON(str);
Salin selepas log masuk
    JSONFunction func = (JSONFunction) jsonObject.get("func");
Salin selepas log masuk
    fail(func.getParams()[0]);
Salin selepas log masuk
    fail(func.getText() );
Salin selepas log masuk
}
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

运行后结果如下:


==============Java StringArray >>> JSON Array ==================
Salin selepas log masuk
["a","b","c"]
Salin selepas log masuk
["a","b","c"]
Salin selepas log masuk
==============Java boolean Array >>> JSON Array ==================
Salin selepas log masuk
[true,false,true]
Salin selepas log masuk
[true,false,true]
Salin selepas log masuk
==============Java Object Array >>> JSON Array ==================
Salin selepas log masuk
[1,"a",true,"A",["a","b","c"],[true,false,true]]
Salin selepas log masuk
[1,"a",true,"A",["a","b","c"],[true,false,true]]
Salin selepas log masuk
==============Java String >>> JSON ==================
Salin selepas log masuk
["json","is","easy"]
Salin selepas log masuk
Salin selepas log masuk
{"json":"is easy"}
Salin selepas log masuk
["json","is","easy"]
Salin selepas log masuk
Salin selepas log masuk
==============Java JSONObject >>> JSON ==================
Salin selepas log masuk
{"string":"JSON","integer":"1","double":"2.0","boolean":"true"}
Salin selepas log masuk
==============Java JSONArray >>> JSON ==================
Salin selepas log masuk
["JSON","1","2.0","true"]
Salin selepas log masuk
==============Java JSONArray JsonConfig#setArrayMode >>> JSON ==================
Salin selepas log masuk
JSON
Salin selepas log masuk
==============Java JSONFunction >>> JSON ==================
Salin selepas log masuk
param
Salin selepas log masuk
doSomethingWithParam(param);
Salin selepas log masuk

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

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

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


private String json = "{\"address\":\"chian\",\"birthday\":{\"birthday\":\"2010-11-22\"}," +
Salin selepas log masuk
        "\"email\":\"email@123.com\",\"id\":22,\"name\":\"tom\"}";
Salin selepas log masuk
/**
Salin selepas log masuk
 * <b>function:</b>将json字符串转化为java对象
Salin selepas log masuk
 * @author hoojo
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
 * @createDate Nov 28, 2010 3:01:16 PM
Salin selepas log masuk
 */
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
@Test
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
public void readJSON2Bean() {
Salin selepas log masuk
    fail("==============JSON Object String >>> Java Bean ==================");
Salin selepas log masuk
    jsonObject = JSONObject.fromObject(json);
Salin selepas log masuk
    Student stu = (Student) JSONObject.toBean(jsonObject, Student.class);
Salin selepas log masuk
    fail(stu.toString());
Salin selepas log masuk
}
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

运行后,结果如下:


==============JSON Object String >>> Java Bean ==================
Salin selepas log masuk
tom#22#chian#2010-11-22#email@123.com
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

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


private String json = "{\"address\":\"chian\",\"birthday\":{\"birthday\":\"2010-11-22\"},"+
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
        "\"email\":\"email@123.com\",\"id\":22,\"name\":\"tom\"}";
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
 <br/>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
@Test
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
public void readJSON2DynaBean() {
Salin selepas log masuk
    try {
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
        fail("==============JSON Object String >>> Java MorphDynaBean ==================");
Salin selepas log masuk
        JSON jo = JSONSerializer.toJSON(json);
Salin selepas log masuk
        Object o = JSONSerializer.toJava(jo);//MorphDynaBean
Salin selepas log masuk
        fail(PropertyUtils.getProperty(o, "address").toString());
Salin selepas log masuk
        jsonObject = JSONObject.fromObject(json);
Salin selepas log masuk
Salin selepas log masuk
        fail(jsonObject.getString("email"));
Salin selepas log masuk
        o = JSONSerializer.toJava(jsonObject);//MorphDynaBean
Salin selepas log masuk
        fail(PropertyUtils.getProperty(o, "name").toString());
Salin selepas log masuk
    } catch (IllegalAccessException e) {
Salin selepas log masuk
        e.printStackTrace();
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
    } catch (InvocationTargetException e) {
Salin selepas log masuk
        e.printStackTrace();
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
    } catch (NoSuchMethodException e) {
Salin selepas log masuk
        e.printStackTrace();
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
    }
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
}
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

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

运行后结果如下:


==============JSON Object String >>> Java MorphDynaBean =============
Salin selepas log masuk
chian
Salin selepas log masuk
email@123.com
Salin selepas log masuk
tom
Salin selepas log masuk

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


private String json = "{\"address\":\"chian\",\"birthday\":{\"birthday\":\"2010-11-22\"},"+
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
        "\"email\":\"email@123.com\",\"id\":22,\"name\":\"tom\"}";
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
 <br/>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
@Test
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
public void readJSON2Array() {
Salin selepas log masuk
    try {
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
        fail("==============JSON Arry String >>> Java Array ==================");
Salin selepas log masuk
        json = "[" + json + "]";
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
        jsonArray = JSONArray.fromObject(json);
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
        fail("#%%%" + jsonArray.get(0).toString());
Salin selepas log masuk
        Object[] os = jsonArray.toArray();
Salin selepas log masuk
        System.out.println(os.length);
Salin selepas log masuk
        <br/>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
        fail(JSONArray.fromObject(json).join(""));
Salin selepas log masuk
        fail(os[0].toString());
Salin selepas log masuk
        Student[] stus = (Student[]) JSONArray.toArray(jsonArray, Student.class);
Salin selepas log masuk
        System.out.println(stus.length);
Salin selepas log masuk
        System.out.println(stus[0]);
Salin selepas log masuk
    } catch (Exception e) {
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
        e.printStackTrace();
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
    }
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
}
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

运行的结果如下:


==============JSON Arry String >>> Java Array ==================
Salin selepas log masuk
#%%%{"address":"chian","birthday":{"birthday":"2010-11-22"},"email":"email@123.com","id":22,"name":"tom"}
Salin selepas log masuk
1
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
{"address":"chian","birthday":{"birthday":"2010-11-22"},"email":"email@123.com","id":22,"name":"tom"}
Salin selepas log masuk
Salin selepas log masuk
{"address":"chian","birthday":{"birthday":"2010-11-22"},"email":"email@123.com","id":22,"name":"tom"}
Salin selepas log masuk
Salin selepas log masuk
1
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
tom#22#chian#2010-11-22#email@123.com
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

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


private String json = "{\"address\":\"chian\",\"birthday\":{\"birthday\":\"2010-11-22\"},"+
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
        "\"email\":\"email@123.com\",\"id\":22,\"name\":\"tom\"}";
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
 <br/>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
@Test
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
public void readJSON2List() {
Salin selepas log masuk
    try {
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
        fail("==============JSON Arry String >>> Java List ==================");
Salin selepas log masuk
        json = "[" + json + "]";
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
        jsonArray = JSONArray.fromObject(json);
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
        List<Student> list = JSONArray.toList(jsonArray, Student.class);
Salin selepas log masuk
        System.out.println(list.size());
Salin selepas log masuk
Salin selepas log masuk
        System.out.println(list.get(0));
Salin selepas log masuk
        <br/>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
        list = JSONArray.toList(jsonArray);
Salin selepas log masuk
        System.out.println(list.size());
Salin selepas log masuk
Salin selepas log masuk
        System.out.println(list.get(0));//MorphDynaBean
Salin selepas log masuk
    } catch (Exception e) {
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
        e.printStackTrace();
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
    }
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
}
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

运行后结果如下:


==============JSON Arry String >>> Java List ==================
Salin selepas log masuk
1
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
tom#22#chian#2010-11-22#email@123.com
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
1
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
net.sf.ezmorph.bean.MorphDynaBean@141b571[
Salin selepas log masuk
  {id=22, birthday=net.sf.ezmorph.bean.MorphDynaBean@b23210[
Salin selepas log masuk
  {birthday=2010-11-22}
Salin selepas log masuk
], address=chian, email=email@123.com, name=tom}
Salin selepas log masuk
]
Salin selepas log masuk

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


private String json = "{\"address\":\"chian\",\"birthday\":{\"birthday\":\"2010-11-22\"},"+
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
        "\"email\":\"email@123.com\",\"id\":22,\"name\":\"tom\"}";
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
 <br/>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
@Test
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
public void readJSON2Collection() {
Salin selepas log masuk
    try {
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
        fail("==============JSON Arry String >>> Java Collection ==================");
Salin selepas log masuk
        json = "[" + json + "]";
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
        jsonArray = JSONArray.fromObject(json);
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
        Collection<Student> con = JSONArray.toCollection(jsonArray, Student.class);
Salin selepas log masuk
        System.out.println(con.size());
Salin selepas log masuk
        Object[] stt = con.toArray();
Salin selepas log masuk
        System.out.println(stt.length);
Salin selepas log masuk
        fail(stt[0].toString());
Salin selepas log masuk
        <br/>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
    } catch (Exception e) {
Salin selepas log masuk
        e.printStackTrace();
Salin selepas log masuk
    }
Salin selepas log masuk
}
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

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


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

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


@Test
Salin selepas log masuk
Salin selepas log masuk
public void readJSON2Map() {
Salin selepas log masuk
    try {
Salin selepas log masuk
        fail("==============JSON Arry String >>> Java Map ==================");
Salin selepas log masuk
        json = "{\"arr\":[\"a\",\"b\"],\"A\":{\"address\":\"address\",\"birthday\":{\"birthday\":\"2010-11-22\"},"+
Salin selepas log masuk
        "\"email\":\"email\",\"id\":1,\"name\":\"jack\"},\"int\":1,"+
Salin selepas log masuk
        "\"B\":{\"address\":\"address\",\"birthday\":{\"birthday\":\"2010-11-22\"},"+
Salin selepas log masuk
        "\"email\":\"email\",\"id\":1,\"name\":\"jack\"},\"name\":\"json\",\"bool\":true}";
Salin selepas log masuk
        jsonObject = JSONObject.fromObject(json);
Salin selepas log masuk
Salin selepas log masuk
        Map<String, Class<?>> clazzMap = new HashMap<String, Class<?>>();
Salin selepas log masuk
        clazzMap.put("arr", String[].class);
Salin selepas log masuk
        clazzMap.put("A", Student.class);
Salin selepas log masuk
        clazzMap.put("B", Student.class);
Salin selepas log masuk
        Map<String, ?> mapBean = (Map) JSONObject.toBean(jsonObject, Map.class, clazzMap);
Salin selepas log masuk
        System.out.println(mapBean);
Salin selepas log masuk
        <br/>
Salin selepas log masuk
        Set<String> set = mapBean.keySet();
Salin selepas log masuk
        Iterator<String> iter = set.iterator();
Salin selepas log masuk
        while (iter.hasNext()) {
Salin selepas log masuk
            String key = iter.next();
Salin selepas log masuk
            fail(key + ":" + mapBean.get(key).toString());
Salin selepas log masuk
        }
Salin selepas log masuk
    } catch (Exception e) {
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
        e.printStackTrace();
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
    }
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
}
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

运行后结果如下:


==============JSON Arry String >>> Java Map ==================
Salin selepas log masuk
{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}
Salin selepas log masuk
A:jack#1#address#2010-11-22#email
Salin selepas log masuk
arr:[a, b]
Salin selepas log masuk
B:jack#1#address#2010-11-22#email
Salin selepas log masuk
int:1
Salin selepas log masuk
name:json
Salin selepas log masuk
bool:true
Salin selepas log masuk

四、 JSON-libXML的支持

1、 将Java对象到XML


/*============================Java Object >>>>> XML ==========================*/
Salin selepas log masuk
/**
Salin selepas log masuk
Salin selepas log masuk
 * <b>function:</b> 转换Java对象到XML
Salin selepas log masuk
 * 需要额外的jar包:xom.jar
Salin selepas log masuk
 * @author hoojo
Salin selepas log masuk
 * @createDate Nov 28, 2010 2:39:55 PM
Salin selepas log masuk
 */
Salin selepas log masuk
@Test
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
public void writeObject2XML() {
Salin selepas log masuk
    XMLSerializer xmlSerializer = new XMLSerializer();
Salin selepas log masuk
    fail("==============Java String Array >>> XML ==================");
Salin selepas log masuk
Salin selepas log masuk
    //xmlSerializer.setElementName("bean");
Salin selepas log masuk
    fail(xmlSerializer.write(JSONArray.fromObject(bean)));
Salin selepas log masuk
    String[] sa = {"a", "b", "c"};
Salin selepas log masuk
    fail("==============Java String Array >>> XML ==================");
Salin selepas log masuk
Salin selepas log masuk
    fail(xmlSerializer.write(JSONArray.fromObject(sa)));
Salin selepas log masuk
    fail("==============Java boolean Array >>> XML ==================");
Salin selepas log masuk
    boolean[] bo = { true, false, true };
Salin selepas log masuk
    fail(xmlSerializer.write(JSONArray.fromObject(bo)));
Salin selepas log masuk
    fail(xmlSerializer.write(JSONSerializer.toJSON(bo)));
Salin selepas log masuk
    Object[] o = { 1, "a", true, &#39;A&#39;, sa, bo };
Salin selepas log masuk
Salin selepas log masuk
    fail("==============Java Object Array >>> JSON Array ==================");
Salin selepas log masuk
Salin selepas log masuk
    fail(xmlSerializer.write(JSONArray.fromObject(o)));
Salin selepas log masuk
    fail(xmlSerializer.write(JSONSerializer.toJSON(o)));
Salin selepas log masuk
    fail("==============Java String >>> JSON ==================");
Salin selepas log masuk
Salin selepas log masuk
    fail(xmlSerializer.write(JSONArray.fromObject("[&#39;json&#39;,&#39;is&#39;,&#39;easy&#39;]")).toString());
Salin selepas log masuk
    fail(xmlSerializer.write(JSONObject.fromObject("{&#39;json&#39;:&#39;is easy&#39;}")).toString());
Salin selepas log masuk
    fail(xmlSerializer.write(JSONSerializer.toJSON("[&#39;json&#39;,&#39;is&#39;,&#39;easy&#39;]")).toString());
Salin selepas log masuk
}
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

主要运用的是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>
Salin selepas log masuk

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

2、 将XML转换成Java对象


/*============================XML String >>>>> Java Object ==========================*/
Salin selepas log masuk
/**
Salin selepas log masuk
Salin selepas log masuk
 * <b>function:</b>转换xml文档到java对象
Salin selepas log masuk
 * @author hoojo
Salin selepas log masuk
 * @createDate Nov 28, 2010 3:00:27 PM
Salin selepas log masuk
 */
Salin selepas log masuk
@Test
Salin selepas log masuk
public void readXML2Object() {
Salin selepas log masuk
    XMLSerializer xmlSerializer = new XMLSerializer();
Salin selepas log masuk
    fail("============== XML >>>> Java String Array ==================");
Salin selepas log masuk
    String[] sa = {"a", "b", "c"};
Salin selepas log masuk
    jsonArray = (JSONArray) xmlSerializer.read(xmlSerializer.write(JSONArray.fromObject(sa)));
Salin selepas log masuk
    fail(jsonArray.toString());
Salin selepas log masuk
    <br/>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
    String[] s = (String[]) JSONArray.toArray(jsonArray, String.class);
Salin selepas log masuk
    fail(s[0].toString());
Salin selepas log masuk
Salin selepas log masuk
    <br/>
Salin selepas log masuk
Salin selepas log masuk
    fail("============== XML >>>> Java boolean Array ==================");
Salin selepas log masuk
    boolean[] bo = { true, false, true };
Salin selepas log masuk
    jsonArray = (JSONArray) xmlSerializer.read(xmlSerializer.write(JSONArray.fromObject(bo)));
Salin selepas log masuk
    bo = (boolean[]) JSONArray.toArray(jsonArray, boolean.class);
Salin selepas log masuk
    fail(bo.toString());
Salin selepas log masuk
    System.out.println(bo[0]);
Salin selepas log masuk
    <br/>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
    jsonArray = (JSONArray) xmlSerializer.read(xmlSerializer.write(JSONSerializer.toJSON(bo)));
Salin selepas log masuk
    bo = (boolean[]) JSONArray.toArray(jsonArray, boolean.class);
Salin selepas log masuk
    fail(bo.toString());
Salin selepas log masuk
    System.out.println(bo[0]);
Salin selepas log masuk
    <br/>
Salin selepas log masuk
Salin selepas log masuk
    fail("==============Java Object Array >>> JSON Array ==================");
Salin selepas log masuk
Salin selepas log masuk
    Object[] o = { 1, "a", true, &#39;A&#39;, sa, bo };
Salin selepas log masuk
Salin selepas log masuk
    jsonArray = (JSONArray) xmlSerializer.read(xmlSerializer.write(JSONArray.fromObject(o)));
Salin selepas log masuk
    System.out.println(jsonArray.getInt(0));
Salin selepas log masuk
    System.out.println(jsonArray.get(1));
Salin selepas log masuk
    System.out.println(jsonArray.getBoolean(2));
Salin selepas log masuk
    jsonArray = (JSONArray) xmlSerializer.read(xmlSerializer.write(JSONSerializer.toJSON(o)));
Salin selepas log masuk
    System.out.println(jsonArray.get(4));
Salin selepas log masuk
    System.out.println(jsonArray.getJSONArray(5).get(0));
Salin selepas log masuk
    System.out.println(jsonArray.get(5));
Salin selepas log masuk
    <br/>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
    fail("==============Java String >>> JSON ==================");
Salin selepas log masuk
Salin selepas log masuk
    jsonArray = (JSONArray) xmlSerializer.read(xmlSerializer.write(JSONArray.fromObject("[&#39;json&#39;,&#39;is&#39;,&#39;easy&#39;]")).toString());
Salin selepas log masuk
    s = (String[]) JSONArray.toArray(jsonArray, String.class);
Salin selepas log masuk
Salin selepas log masuk
    fail(s[0].toString());
Salin selepas log masuk
Salin selepas log masuk
    jsonObject = (JSONObject) xmlSerializer.read(xmlSerializer.write(JSONObject.fromObject("{&#39;json&#39;:&#39;is easy&#39;}")).toString());
Salin selepas log masuk
    Object obj = JSONObject.toBean(jsonObject);
Salin selepas log masuk
    System.out.println(obj);
Salin selepas log masuk
    jsonArray = (JSONArray) xmlSerializer.read(xmlSerializer.write(JSONSerializer.toJSON("[&#39;json&#39;,&#39;is&#39;,&#39;easy&#39;]")).toString());
Salin selepas log masuk
    s = (String[]) JSONArray.toArray(jsonArray, String.class);
Salin selepas log masuk
Salin selepas log masuk
    fail(s[1].toString());
Salin selepas log masuk
}
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

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


============== XML >>>> Java String Array ==================
Salin selepas log masuk
["a","b","c"]
Salin selepas log masuk
a
Salin selepas log masuk
Salin selepas log masuk
============== XML >>>> Java boolean Array ==================
Salin selepas log masuk
[Z@15856a5
Salin selepas log masuk
true
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
[Z@79ed7f
Salin selepas log masuk
true
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
==============Java Object Array >>> JSON Array ==================
Salin selepas log masuk
1
Salin selepas log masuk
a
Salin selepas log masuk
Salin selepas log masuk
true
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
["a","b","c"]
Salin selepas log masuk
true
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
["true","false","true"]
Salin selepas log masuk
==============Java String >>> JSON ==================
Salin selepas log masuk
json
Salin selepas log masuk
net.sf.ezmorph.bean.MorphDynaBean@c09554[
Salin selepas log masuk
  {json=is easy}
Salin selepas log masuk
]
Salin selepas log masuk
is
Salin selepas log masuk

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


@Test
Salin selepas log masuk
Salin selepas log masuk
public void testReadXml2Array() {
Salin selepas log masuk
    String str = "<a class=\"array\">" +
Salin selepas log masuk
          "<e type=\"function\" params=\"i,j\">" +
Salin selepas log masuk
          "return matrix[i][j];" +
Salin selepas log masuk
          "</e>" +
Salin selepas log masuk
        "</a>";
Salin selepas log masuk
    JSONArray json = (JSONArray) new XMLSerializer().read(str);
Salin selepas log masuk
    fail(json.toString());
Salin selepas log masuk
}
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

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


[function(i,j){ return matrix[i][j]; }]
Salin selepas log masuk

就是一个数组;

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


Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Adakah kelajuan penukaran cepat apabila menukar XML ke PDF pada telefon bimbit? Adakah kelajuan penukaran cepat apabila menukar XML ke PDF pada telefon bimbit? Apr 02, 2025 pm 10:09 PM

Kelajuan XML mudah alih ke PDF bergantung kepada faktor -faktor berikut: kerumitan struktur XML. Kaedah Penukaran Konfigurasi Perkakasan Mudah Alih (Perpustakaan, Algoritma) Kaedah Pengoptimuman Kualiti Kod (Pilih perpustakaan yang cekap, mengoptimumkan algoritma, data cache, dan menggunakan pelbagai threading). Secara keseluruhannya, tidak ada jawapan mutlak dan ia perlu dioptimumkan mengikut keadaan tertentu.

Bagaimana cara menukar fail XML ke PDF di telefon anda? Bagaimana cara menukar fail XML ke PDF di telefon anda? Apr 02, 2025 pm 10:12 PM

Tidak mustahil untuk menyelesaikan penukaran XML ke PDF secara langsung di telefon anda dengan satu aplikasi. Ia perlu menggunakan perkhidmatan awan, yang boleh dicapai melalui dua langkah: 1. Tukar XML ke PDF di awan, 2. Akses atau muat turun fail PDF yang ditukar pada telefon bimbit.

Bagaimana cara menukar XML ke PDF di telefon anda? Bagaimana cara menukar XML ke PDF di telefon anda? Apr 02, 2025 pm 10:18 PM

Ia tidak mudah untuk menukar XML ke PDF secara langsung pada telefon anda, tetapi ia boleh dicapai dengan bantuan perkhidmatan awan. Adalah disyorkan untuk menggunakan aplikasi mudah alih ringan untuk memuat naik fail XML dan menerima PDF yang dihasilkan, dan menukarnya dengan API awan. API awan menggunakan perkhidmatan pengkomputeran tanpa pelayan, dan memilih platform yang betul adalah penting. Kerumitan, pengendalian kesilapan, keselamatan, dan strategi pengoptimuman perlu dipertimbangkan ketika mengendalikan penjanaan XML dan penjanaan PDF. Seluruh proses memerlukan aplikasi front-end dan API back-end untuk bekerjasama, dan ia memerlukan pemahaman tentang pelbagai teknologi.

Alat pemformatan XML yang disyorkan Alat pemformatan XML yang disyorkan Apr 02, 2025 pm 09:03 PM

Alat pemformatan XML boleh menaip kod mengikut peraturan untuk meningkatkan kebolehbacaan dan pemahaman. Apabila memilih alat, perhatikan keupayaan penyesuaian, pengendalian keadaan khas, prestasi dan kemudahan penggunaan. Jenis alat yang biasa digunakan termasuk alat dalam talian, pemalam IDE, dan alat baris arahan.

Adakah terdapat aplikasi mudah alih yang boleh menukar XML ke PDF? Adakah terdapat aplikasi mudah alih yang boleh menukar XML ke PDF? Apr 02, 2025 pm 08:54 PM

Permohonan yang menukarkan XML terus ke PDF tidak dapat dijumpai kerana mereka adalah dua format yang berbeza. XML digunakan untuk menyimpan data, manakala PDF digunakan untuk memaparkan dokumen. Untuk melengkapkan transformasi, anda boleh menggunakan bahasa pengaturcaraan dan perpustakaan seperti Python dan ReportLab untuk menghuraikan data XML dan menghasilkan dokumen PDF.

Cara Membuka Web.xml Cara Membuka Web.xml Apr 03, 2025 am 06:51 AM

Untuk membuka fail web.xml, anda boleh menggunakan kaedah berikut: Gunakan editor teks (seperti Notepad atau TextEdit) untuk mengedit arahan menggunakan persekitaran pembangunan bersepadu (seperti Eclipse atau NetBeans) (Windows: Notepad Web.xml; Mac/Linux: Open -A -A TextEdit Web.xml)

Cara Membuka Format XML Cara Membuka Format XML Apr 02, 2025 pm 09:00 PM

Gunakan kebanyakan editor teks untuk membuka fail XML; Jika anda memerlukan paparan pokok yang lebih intuitif, anda boleh menggunakan editor XML, seperti editor XML oksigen atau XMLSPY; Jika anda memproses data XML dalam program, anda perlu menggunakan bahasa pengaturcaraan (seperti Python) dan perpustakaan XML (seperti XML.Etree.ElementTree) untuk menghuraikan.

Cara Mengeksport PDF dengan XML Cara Mengeksport PDF dengan XML Apr 03, 2025 am 06:45 AM

Terdapat dua cara untuk mengeksport XML ke PDF: menggunakan XSLT dan menggunakan perpustakaan mengikat data XML. XSLT: Buat lembaran gaya XSLT, tentukan format PDF untuk menukar data XML menggunakan pemproses XSLT. Perpustakaan mengikat data XML: Import Perpustakaan Pengikat Data XML Buat dokumen PDF Memuatkan Fail PDF Eksport Data XML. Kaedah mana yang lebih baik untuk fail PDF bergantung kepada keperluan. XSLT menyediakan fleksibiliti, manakala perpustakaan mengikat data mudah dilaksanakan; Untuk penukaran mudah, perpustakaan mengikat data lebih baik, dan untuk penukaran yang kompleks, XSLT lebih sesuai.

See all articles