Heim > Backend-Entwicklung > XML/RSS-Tutorial > Mit dem JSON-lib-Framework ist die Konvertierung von JSON und XML nicht mehr schwierig

Mit dem JSON-lib-Framework ist die Konvertierung von JSON und XML nicht mehr schwierig

黄舟
Freigeben: 2017-02-18 15:10:46
Original
2102 Leute haben es durchsucht

Json-lib kann Java-Objekte in JSON-Format-Strings konvertieren und kann auch Java-Objekte in XML-Format-Dokumente konvertieren. Es kann auch JSON-Strings in Java-Objekte oder XML-Strings in Java-Objekte konvertieren.

1. Vorbereitung

1 Gehen Sie zum offiziellen Download des json-lib-Toolpakets

Download-Adresse:

http://www.php.cn/

Die neueste Version ist in diesem Beispiel 2.4. v2.3 wird verwendet; json-lib erfordert außerdem die folgenden Abhängigkeitspakete:

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

Offizielle Website: http://www.php.cn/

Dann fügen Sie dem Projekt das folgende JAR-Paket hinzu:

Mit dem JSON-lib-Framework ist die Konvertierung von JSON und XML nicht mehr schwierig

Natürlich können Sie auch die 2.4 json-lib-Bibliothek verwenden

Sie können sich die offizielle Version ansehen Angebot hier Beispiel:

http://www.php.cn/

Da das dieses Mal vorgestellte Beispiel das Junit-Tool erfordert, müssen Sie auch die Junit-JAR-Datei hinzufügen, die Version ist 4.8.2 Version, Download-Adresse: http://www.php.cn/

Wenn Sie immer noch nicht wissen, was JSON ist? Dann sollten Sie einen Blick auf http://www.php.cn/

2 werfen. Der Code des zu konvertierenden JavaBean lautet wie folgt:


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

Geburtstag .java


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

Beachten Sie, dass die oben genannten Getter- und Setter-Methoden weggelassen werden. Erstellen Sie sie selbst .

3. Erstellen Sie eine neue JsonlibTest-Testklasse:


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

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

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

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

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

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


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

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


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

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


==============Java List >>> JSON Array==================
Nach dem Login kopieren
[{"address":"address","birthday":{"birthday":"2010-11-22"},"email":"email","id":1,"name":"jack"},
Nach dem Login kopieren
Nach dem Login kopieren
{"address":"address","birthday":{"birthday":"2010-11-22"},"email":"email","id":1,"name":"jack"}]
Nach dem Login kopieren
Nach dem Login kopieren
[{"address":"address","birthday":{"birthday":"2010-11-22"},"email":"email","id":1,"name":"jack"},
Nach dem Login kopieren
Nach dem Login kopieren
{"address":"address","birthday":{"birthday":"2010-11-22"},"email":"email","id":1,"name":"jack"}]
Nach dem Login kopieren
Nach dem Login kopieren

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

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


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

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

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


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

4、 将更多类型转换成JSON


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

运行后结果如下:


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

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

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

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


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

运行后,结果如下:


==============JSON Object String >>> Java Bean ==================
Nach dem Login kopieren
tom#22#chian#2010-11-22#email@123.com
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

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


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

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

运行后结果如下:


==============JSON Object String >>> Java MorphDynaBean =============
Nach dem Login kopieren
chian
Nach dem Login kopieren
email@123.com
Nach dem Login kopieren
tom
Nach dem Login kopieren

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


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

运行的结果如下:


==============JSON Arry String >>> Java Array ==================
Nach dem Login kopieren
#%%%{"address":"chian","birthday":{"birthday":"2010-11-22"},"email":"email@123.com","id":22,"name":"tom"}
Nach dem Login kopieren
1
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
{"address":"chian","birthday":{"birthday":"2010-11-22"},"email":"email@123.com","id":22,"name":"tom"}
Nach dem Login kopieren
Nach dem Login kopieren
{"address":"chian","birthday":{"birthday":"2010-11-22"},"email":"email@123.com","id":22,"name":"tom"}
Nach dem Login kopieren
Nach dem Login kopieren
1
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
tom#22#chian#2010-11-22#email@123.com
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

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


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

运行后结果如下:


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

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


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

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


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

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


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

运行后结果如下:


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

四、 JSON-libXML的支持

1、 将Java对象到XML


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

主要运用的是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>
Nach dem Login kopieren

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

2、 将XML转换成Java对象


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

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


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

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


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

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


[function(i,j){ return matrix[i][j]; }]
Nach dem Login kopieren

就是一个数组;

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


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage