ホームページ バックエンド開発 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. 準備

ダウンロードアドレス:

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 パッケージをプロジェクトに追加します:

もちろん2.4 json-lib ライブラリも使用できますJSON-lib フレームワーク、JSON と XML の変換はもう難しくありません

公式のサンプルはこちらからご覧いただけます:

http://www.php.cn/

今回紹介したサンプルはjunitツールが必要なので、 junit の jar ファイルも追加する必要があります。バージョンはバージョン 4.8.2、ダウンロード アドレス: http://www.php.cn/

JSON が何なのかまだ理解できない場合は、次に、http://www.php.cn/

2 を参照してください。変換される JavaBean のコードは次のとおりです。
package com.hoo.entity;
ログイン後にコピー
ログイン後にコピー

 <br>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
public class Student {
ログイン後にコピー

    private int id;
ログイン後にコピー
    private String name;
ログイン後にコピー

    private String email;
ログイン後にコピー

    private String address;
ログイン後にコピー
    private Birthday birthday;
ログイン後にコピー

 <br>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
    //setter、getter
ログイン後にコピー
ログイン後にコピー
    public String toString() {
ログイン後にコピー
Birthday.java
        return this.name + "#" + this.id + "#" + this.address + "#" + this.birthday + "#" + this.email;
ログイン後にコピー
rreeerreee
    }
ログイン後にコピー
ログイン後にコピー
rreee

}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
 <br>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

package com.hoo.entity;
ログイン後にコピー
ログイン後にコピー
 <br>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

public class Birthday {
ログイン後にコピー

    private String birthday;
ログイン後にコピー
    <br>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

    public Birthday(String birthday) {
ログイン後にコピー
        super();
ログイン後にコピー
        this.birthday = birthday;
ログイン後にコピー
    }
ログイン後にコピー
ログイン後にコピー
    //setter、getter
ログイン後にコピー
ログイン後にコピー
上記の getter メソッドと setter メソッドは省略されていることに注意して、自分で構築してください。 3. 新しい JsonlibTest テスト クラスを作成します。 基本的なコードは次のとおりです。 りーりーりー
    public Birthday() {}
ログイン後にコピー
    <br>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
rreee
    @Override
ログイン後にコピー
rreee

    public String toString() {
ログイン後にコピー
        return this.birthday;
ログイン後にコピー

    }
ログイン後にコピー
}
ログイン後にコピー
ログイン後にコピー

package com.hoo.test;
ログイン後にコピー
 <br>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

rreee

import java.lang.reflect.InvocationTargetException;
ログイン後にコピー
import java.util.ArrayList;
ログイン後にコピー

import java.util.Collection;
ログイン後にコピー
import java.util.Date;
ログイン後にコピー
import java.util.HashMap;
ログイン後にコピー
rrreええ
import java.util.Iterator;
ログイン後にコピー
rreee
import java.util.List;
ログイン後にコピー
import java.util.Map;
ログイン後にコピー
import java.util.Set;
ログイン後にコピー
import net.sf.json.JSON;
ログイン後にコピー
import net.sf.json.JSONArray;
ログイン後にコピー
import net.sf.json.JSONFunction;
ログイン後にコピー
import net.sf.json.JSONObject;
ログイン後にコピー
rreee
import net.sf.json.JSONSerializer;
ログイン後にコピー
rreee
import net.sf.json.JsonConfig;
ログイン後にコピー
import net.sf.json.processors.JsonValueProcessor;
ログイン後にコピー
import net.sf.json.util.PropertyFilter;
ログイン後にコピー
import net.sf.json.xml.XMLSerializer;
ログイン後にコピー
import org.apache.commons.beanutils.PropertyUtils;
ログイン後にコピー
import org.junit.After;
ログイン後にコピー
rreee
import org.junit.Before;
ログイン後にコピー
import org.junit.Test;
ログイン後にコピー
import com.hoo.entity.Birthday;
ログイン後にコピー
import com.hoo.entity.Student;
ログイン後にコピー
 <br>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
rrreええ
/**
ログイン後にコピー
ログイン後にコピー
rreee
 * <b>function:</b> 用json-lib转换java对象到JSON字符串
ログイン後にコピー
 * 读取json字符串到java对象,序列化jsonObject到xml
ログイン後にコピー
 * json-lib-version: json-lib-2.3-jdk15.jar
ログイン後にコピー
 * 依赖包:
ログイン後にコピー
 * commons-beanutils.jar
ログイン後にコピー
 * commons-collections-3.2.jar
ログイン後にコピー
 * ezmorph-1.0.3.jar
ログイン後にコピー
rreee
 * commons-lang.jar
ログイン後にコピー
rreee
 * commons-logging.jar
ログイン後にコピー
 * @author hoojo
ログイン後にコピー
ログイン後にコピー
 * @createDate Nov 28, 2010 2:28:39 PM
ログイン後にコピー
 * @file JsonlibTest.java
ログイン後にコピー
 * @package com.hoo.test
ログイン後にコピー
 * @project WebHttpUtils
ログイン後にコピー
rreee
 * @blog http://www.php.cn/
ログイン後にコピー
 * @email hoojo_@126.com
ログイン後にコピー
 * @version 1.0
ログイン後にコピー
 */
ログイン後にコピー
ログイン後にコピー
@SuppressWarnings({ "deprecation", "unchecked" })
ログイン後にコピー
rrreえーるーるーるーるー

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

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

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

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

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


==============Java Bean >>> JSON Object==================
ログイン後にコピー
{"address":"address","birthday":{"birthday":"2010-11-22"},"email":"email","id":1,"name":"haha"}
ログイン後にコピー
ログイン後にコピー
==============Java Bean >>> JSON Array==================
ログイン後にコピー
[{"address":"address","birthday":{"birthday":"2010-11-22"},"email":"email","id":1,"name":"haha"}]
ログイン後にコピー
==============Java Bean >>> JSON Object ==================
ログイン後にコピー
{"address":"address","birthday":{"birthday":"2010-11-22"},"email":"email","id":1,"name":"haha"}
ログイン後にコピー
ログイン後にコピー
========================JsonConfig========================
ログイン後にコピー
key:birthday
ログイン後にコピー
{"address":"address","birthday":"2010-11-22##修改过的日期","email":"email","id":1,"name":"haha"}
ログイン後にコピー
2010-11-22##修改过的日期
ログイン後にコピー
haha#1#address#null#email
ログイン後にコピー
#####################JsonPropertyFilter############################
ログイン後にコピー
haha#1#address#2010-11-22#email%%%address--address
ログイン後にコピー
haha#1#address#2010-11-22#email%%%birthday--2010-11-22
ログイン後にコピー
haha#1#address#2010-11-22#email%%%email--email
ログイン後にコピー
haha#1#address#2010-11-22#email%%%id--1
ログイン後にコピー
haha#1#address#2010-11-22#email%%%name--haha
ログイン後にコピー
{"address":"address","email":"email","id":1,"name":"haha"}
ログイン後にコピー
#################JavaPropertyFilter##################
ログイン後にコピー
address@address#null#0#null#null#null
ログイン後にコピー
birthday@2010-11-22##修改过的日期#null#0#address#null#null
ログイン後にコピー
email@email#null#0#address#null#null
ログイン後にコピー
id@1#null#0#address#null#null
ログイン後にコピー
name@haha#null#0#address#null#null
ログイン後にコピー
Student:haha#0#address#null#null
ログイン後にコピー

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


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

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


==============Java List >>> JSON Array==================
ログイン後にコピー
[{"address":"address","birthday":{"birthday":"2010-11-22"},"email":"email","id":1,"name":"jack"},
ログイン後にコピー
ログイン後にコピー
{"address":"address","birthday":{"birthday":"2010-11-22"},"email":"email","id":1,"name":"jack"}]
ログイン後にコピー
ログイン後にコピー
[{"address":"address","birthday":{"birthday":"2010-11-22"},"email":"email","id":1,"name":"jack"},
ログイン後にコピー
ログイン後にコピー
{"address":"address","birthday":{"birthday":"2010-11-22"},"email":"email","id":1,"name":"jack"}]
ログイン後にコピー
ログイン後にコピー

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

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


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

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

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


==============Java Map >>> JSON Object==================
ログイン後にコピー
{"arr":["a","b"],"A":{"address":"address","birthday":{"birthday":"2010-11-22"},"email":"email","id":1,"name":"jack"},"int":1,
ログイン後にコピー
ログイン後にコピー
"B":{"address":"address","birthday":{"birthday":"2010-11-22"},"email":"email","id":1,"name":"jack"},"name":"json",
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
"func":function(i){ return this.arr[i]; },"bool":true}
ログイン後にコピー
ログイン後にコピー
==============Java Map >>> JSON Array ==================
ログイン後にコピー
[{"arr":["a","b"],"A":{"address":"address","birthday":{"birthday":"2010-11-22"},"email":"email","id":1,"name":"jack"},"int":1,
ログイン後にコピー
"B":{"address":"address","birthday":{"birthday":"2010-11-22"},"email":"email","id":1,"name":"jack"},"name":"json",
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
"func":function(i){ return this.arr[i]; },"bool":true}]
ログイン後にコピー
==============Java Map >>> JSON Object==================
ログイン後にコピー
{"arr":["a","b"],"A":{"address":"address","birthday":{"birthday":"2010-11-22"},"email":"email","id":1,"name":"jack"},"int":1,
ログイン後にコピー
ログイン後にコピー
"B":{"address":"address","birthday":{"birthday":"2010-11-22"},"email":"email","id":1,"name":"jack"},"name":"json",
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
"func":function(i){ return this.arr[i]; },"bool":true}
ログイン後にコピー
ログイン後にコピー

4、 将更多类型转换成JSON


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

运行后结果如下:


==============Java StringArray >>> JSON Array ==================
ログイン後にコピー
["a","b","c"]
ログイン後にコピー
["a","b","c"]
ログイン後にコピー
==============Java boolean Array >>> JSON Array ==================
ログイン後にコピー
[true,false,true]
ログイン後にコピー
[true,false,true]
ログイン後にコピー
==============Java Object Array >>> JSON Array ==================
ログイン後にコピー
[1,"a",true,"A",["a","b","c"],[true,false,true]]
ログイン後にコピー
[1,"a",true,"A",["a","b","c"],[true,false,true]]
ログイン後にコピー
==============Java String >>> JSON ==================
ログイン後にコピー
["json","is","easy"]
ログイン後にコピー
ログイン後にコピー
{"json":"is easy"}
ログイン後にコピー
["json","is","easy"]
ログイン後にコピー
ログイン後にコピー
==============Java JSONObject >>> JSON ==================
ログイン後にコピー
{"string":"JSON","integer":"1","double":"2.0","boolean":"true"}
ログイン後にコピー
==============Java JSONArray >>> JSON ==================
ログイン後にコピー
["JSON","1","2.0","true"]
ログイン後にコピー
==============Java JSONArray JsonConfig#setArrayMode >>> JSON ==================
ログイン後にコピー
JSON
ログイン後にコピー
==============Java JSONFunction >>> JSON ==================
ログイン後にコピー
param
ログイン後にコピー
doSomethingWithParam(param);
ログイン後にコピー

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

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

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


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

运行后,结果如下:


==============JSON Object String >>> Java Bean ==================
ログイン後にコピー
tom#22#chian#2010-11-22#email@123.com
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

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


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

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

运行后结果如下:


==============JSON Object String >>> Java MorphDynaBean =============
ログイン後にコピー
chian
ログイン後にコピー
email@123.com
ログイン後にコピー
tom
ログイン後にコピー

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


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

运行的结果如下:


==============JSON Arry String >>> Java Array ==================
ログイン後にコピー
#%%%{"address":"chian","birthday":{"birthday":"2010-11-22"},"email":"email@123.com","id":22,"name":"tom"}
ログイン後にコピー
1
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
{"address":"chian","birthday":{"birthday":"2010-11-22"},"email":"email@123.com","id":22,"name":"tom"}
ログイン後にコピー
ログイン後にコピー
{"address":"chian","birthday":{"birthday":"2010-11-22"},"email":"email@123.com","id":22,"name":"tom"}
ログイン後にコピー
ログイン後にコピー
1
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
tom#22#chian#2010-11-22#email@123.com
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

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


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

运行后结果如下:


==============JSON Arry String >>> Java List ==================
ログイン後にコピー
1
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
tom#22#chian#2010-11-22#email@123.com
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
1
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
net.sf.ezmorph.bean.MorphDynaBean@141b571[
ログイン後にコピー
  {id=22, birthday=net.sf.ezmorph.bean.MorphDynaBean@b23210[
ログイン後にコピー
  {birthday=2010-11-22}
ログイン後にコピー
], address=chian, email=email@123.com, name=tom}
ログイン後にコピー
]
ログイン後にコピー

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


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

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


==============JSON Arry String >>> Java Collection ==================
ログイン後にコピー
1
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
1
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
tom#22#chian#2010-11-22#email@123.com
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

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


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

运行后结果如下:


==============JSON Arry String >>> Java Map ==================
ログイン後にコピー
{A=jack#1#address#2010-11-22#email, arr=[a, b], B=jack#1#address#2010-11-22#email, int=1, name=json, bool=true}
ログイン後にコピー
A:jack#1#address#2010-11-22#email
ログイン後にコピー
arr:[a, b]
ログイン後にコピー
B:jack#1#address#2010-11-22#email
ログイン後にコピー
int:1
ログイン後にコピー
name:json
ログイン後にコピー
bool:true
ログイン後にコピー

四、 JSON-libXML的支持

1、 将Java对象到XML


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

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

运行后结果如下:

==============Java String Array >>> XML ==================
<?xml version="1.0" encoding="UTF-8"?>
<a><e class="object">
<address type="string">address</address><birthday class="object"><birthday type="string">2010-11-22</birthday></birthday>
<email type="string">email</email><id type="number">1</id><name type="string">haha</name>
</e></a>
 
==============Java String Array >>> XML ==================
<?xml version="1.0" encoding="UTF-8"?>
<a><e type="string">a</e><e type="string">b</e><e type="string">c</e></a>
 
==============Java boolean Array >>> XML ==================
<?xml version="1.0" encoding="UTF-8"?>
<a><e type="boolean">true</e><e type="boolean">false</e><e type="boolean">true</e></a>
 
<?xml version="1.0" encoding="UTF-8"?>
<a><e type="boolean">true</e><e type="boolean">false</e><e type="boolean">true</e></a>
 
==============Java Object Array >>> JSON Array ==================
<?xml version="1.0" encoding="UTF-8"?>
<a><e type="number">1</e><e type="string">a</e><e type="boolean">true</e><e type="string">A</e><e class="array">
<e type="string">a</e><e type="string">b</e><e type="string">c</e></e><e class="array"><e type="boolean">true</e>
<e type="boolean">false</e><e type="boolean">true</e></e></a>
 
<?xml version="1.0" encoding="UTF-8"?>
<a><e type="number">1</e><e type="string">a</e><e type="boolean">true</e><e type="string">A</e><e class="array">
<e type="string">a</e><e type="string">b</e><e type="string">c</e></e><e class="array"><e type="boolean">true</e>
<e type="boolean">false</e><e type="boolean">true</e></e></a>
 
==============Java String >>> JSON ==================
<?xml version="1.0" encoding="UTF-8"?>
<a><e type="string">json</e><e type="string">is</e><e type="string">easy</e></a>
 
<?xml version="1.0" encoding="UTF-8"?>
<o><json type="string">is easy</json></o>
 
<?xml version="1.0" encoding="UTF-8"?>
<a><e type="string">json</e><e type="string">is</e><e type="string">easy</e></a>
ログイン後にコピー

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

2、 将XML转换成Java对象


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

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


============== XML >>>> Java String Array ==================
ログイン後にコピー
["a","b","c"]
ログイン後にコピー
a
ログイン後にコピー
ログイン後にコピー
============== XML >>>> Java boolean Array ==================
ログイン後にコピー
[Z@15856a5
ログイン後にコピー
true
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
[Z@79ed7f
ログイン後にコピー
true
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
==============Java Object Array >>> JSON Array ==================
ログイン後にコピー
1
ログイン後にコピー
a
ログイン後にコピー
ログイン後にコピー
true
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
["a","b","c"]
ログイン後にコピー
true
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
["true","false","true"]
ログイン後にコピー
==============Java String >>> JSON ==================
ログイン後にコピー
json
ログイン後にコピー
net.sf.ezmorph.bean.MorphDynaBean@c09554[
ログイン後にコピー
  {json=is easy}
ログイン後にコピー
]
ログイン後にコピー
is
ログイン後にコピー

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


@Test
ログイン後にコピー
ログイン後にコピー
public void testReadXml2Array() {
ログイン後にコピー
    String str = "<a class=\"array\">" +
ログイン後にコピー
          "<e type=\"function\" params=\"i,j\">" +
ログイン後にコピー
          "return matrix[i][j];" +
ログイン後にコピー
          "</e>" +
ログイン後にコピー
        "</a>";
ログイン後にコピー
    JSONArray json = (JSONArray) new XMLSerializer().read(str);
ログイン後にコピー
    fail(json.toString());
ログイン後にコピー
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

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


[function(i,j){ return matrix[i][j]; }]
ログイン後にコピー

就是一个数组;

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


このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

携帯電話でXMLをPDFに変換するとき、変換速度は高速ですか? 携帯電話でXMLをPDFに変換するとき、変換速度は高速ですか? Apr 02, 2025 pm 10:09 PM

Mobile XMLからPDFへの速度は、次の要因に依存します。XML構造の複雑さです。モバイルハードウェア構成変換方法(ライブラリ、アルゴリズム)コードの品質最適化方法(効率的なライブラリ、アルゴリズムの最適化、キャッシュデータ、およびマルチスレッドの利用)。全体として、絶対的な答えはなく、特定の状況に従って最適化する必要があります。

携帯電話のXMLファイルをPDFに変換する方法は? 携帯電話のXMLファイルをPDFに変換する方法は? Apr 02, 2025 pm 10:12 PM

単一のアプリケーションで携帯電話でXMLからPDF変換を直接完了することは不可能です。クラウドサービスを使用する必要があります。クラウドサービスは、2つのステップで達成できます。1。XMLをクラウド内のPDFに変換し、2。携帯電話の変換されたPDFファイルにアクセスまたはダウンロードします。

携帯電話でXMLをPDFに変換する方法は? 携帯電話でXMLをPDFに変換する方法は? Apr 02, 2025 pm 10:18 PM

携帯電話でXMLをPDFに直接変換するのは簡単ではありませんが、クラウドサービスの助けを借りて実現できます。軽量モバイルアプリを使用してXMLファイルをアップロードし、生成されたPDFを受信し、クラウドAPIで変換することをお勧めします。クラウドAPIはサーバーレスコンピューティングサービスを使用し、適切なプラットフォームを選択することが重要です。 XMLの解析とPDF生成を処理する際には、複雑さ、エラー処理、セキュリティ、および最適化戦略を考慮する必要があります。プロセス全体では、フロントエンドアプリとバックエンドAPIが連携する必要があり、さまざまなテクノロジーをある程度理解する必要があります。

推奨されるXMLフォーマットツール 推奨されるXMLフォーマットツール Apr 02, 2025 pm 09:03 PM

XMLフォーマットツールは、読みやすさと理解を向上させるために、ルールに従ってコードを入力できます。ツールを選択するときは、カスタマイズ機能、特別な状況の処理、パフォーマンス、使いやすさに注意してください。一般的に使用されるツールタイプには、オンラインツール、IDEプラグイン、コマンドラインツールが含まれます。

XMLをPDFに変換できるモバイルアプリはありますか? XMLをPDFに変換できるモバイルアプリはありますか? Apr 02, 2025 pm 08:54 PM

XMLをPDFに直接変換するアプリケーションは、2つの根本的に異なる形式であるため、見つかりません。 XMLはデータの保存に使用され、PDFはドキュメントを表示するために使用されます。変換を完了するには、PythonやReportLabなどのプログラミング言語とライブラリを使用して、XMLデータを解析してPDFドキュメントを生成できます。

web.xmlを開く方法 web.xmlを開く方法 Apr 03, 2025 am 06:51 AM

web.xmlファイルを開くには、次の方法を使用できます。テキストエディター(メモ帳やテキストエディットなど)を使用して、統合開発環境(EclipseやNetBeansなど)を使用してコマンドを編集できます(Windows:Notepad web.xml; Mac/Linux:Open -A Textedit Web.xml)

XML形式を開く方法 XML形式を開く方法 Apr 02, 2025 pm 09:00 PM

ほとんどのテキストエディターを使用して、XMLファイルを開きます。より直感的なツリーディスプレイが必要な場合は、酸素XMLエディターやXMLSPYなどのXMLエディターを使用できます。プログラムでXMLデータを処理する場合、プログラミング言語(Pythonなど)やXMLライブラリ(XML.ETREE.ELEMENTTREEなど)を使用して解析する必要があります。

XMLでPDFをエクスポートする方法 XMLでPDFをエクスポートする方法 Apr 03, 2025 am 06:45 AM

XMLをPDFにエクスポートするには、XSLTを使用し、XMLデータバインディングライブラリを使用する方法は2つあります。 XSLT:XSLT StyleSheetを作成し、XSLTプロセッサを使用してXMLデータを変換するPDF形式を指定します。 XMLデータバインディングライブラリ:XMLデータバインディングライブラリのインポートPDFドキュメントオブジェクトの作成XMLデータエクスポートPDFファイル。 PDFファイルに適している方法は、要件に依存します。 XSLTは柔軟性を提供しますが、データバインディングライブラリは簡単に実装できます。単純な変換のために、データバインディングライブラリの方が優れており、複雑な変換の場合、XSLTがより適しています。

See all articles