Java中JSON-lib包解析Json格式总结

JSON-lib包是一个beans,collections,maps,java arrays,XML和JSON互相转换的包,可以将Java对象转成json格式的字符串,也可以将Java对象转换成xml格式的文档,同样可以将json字符串转换成Java对象或是将xml字符串转换成Java对象。

下载

JSON-lib包下载地址:http://json-lib.sourceforge.net/

格式转换方法

1. List集合转换成json方法

List list = new ArrayList();
list.add( "one" );
list.add( "two" );
JSONArray jsonArray2 = JSONArray.fromObject( list );

2. Map集合转换成json方法

Map map = new HashMap();
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]; }");
JSONObject json = JSONObject.fromObject(map);

3. Bean转换成json方法

JSONObject jsonObject = JSONObject.fromObject(new JsonBean());

4. 数组转换成json方法

boolean[] boolArray = new boolean[] { true, false, true };
JSONArray jsonArray1 = JSONArray.fromObject(boolArray);

5. 字符串转换成json方法

JSONArray jsonArray3 = JSONArray.fromObject("['json','is','easy']" );

6. beans转换成json方法

List list = new ArrayList();
JsonBean2 jb1 = new JsonBean2();
jb1.setCol(1);
jb1.setRow(1);
jb1.setValue("xx");

JsonBean2 jb2 = new JsonBean2();
jb2.setCol(2);
jb2.setRow(2);
jb2.setValue("");

list.add(jb1);
list.add(jb2);
JSONArray ja = JSONArray.fromObject(list);

7. JSONObject转换DynaBean方法

String json = "{name=\"json\",bool:true,int:1,double:2.2}";
JSONObject jsonObject = JSONObject.fromObject(json);
//抽象的写法:DynaBean bean = (DynaBean) JSONSerializer.toJava( jsonObject );   
Object bean = JSONObject.toBean(jsonObject);
//Object bean1 = JSONSerializer.toJava(jsonObject);
assertEquals(jsonObject.get("name"), PropertyUtils.getProperty(bean, "name"));
assertEquals(jsonObject.get("bool"), PropertyUtils.getProperty(bean, "bool"));
assertEquals(jsonObject.get("int"), PropertyUtils.getProperty(bean, "int"));
assertEquals(jsonObject.get("double"), PropertyUtils.getProperty(bean, "double"));

8. JSONObject转换JavaBean方法

String json = "{name:\"zhangsan\",age:25,hight:1.72,sex:true}";
JSONObject jsonObject = JSONObject.fromObject(json);
UserBean bean = (UserBean) JSONObject.toBean(jsonObject, UserBean.class);
System.out.println(jsonObject);

9. JSONArray转换List方法

String json = "[\"first\",\"second\"]";
JSONArray jsonArray = (JSONArray) JSONSerializer.toJSON(json);
List output = (List) JSONSerializer.toJava(jsonArray);

10. JSONArray转换array方法

String json = "[\"first\",\"second\"]";
JSONArray jsonArray = (JSONArray) JSONSerializer.toJSON(json);
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setArrayMode(JsonConfig.MODE_OBJECT_ARRAY);
Object[] output = (Object[]) JSONSerializer.toJava(jsonArray, jsonConfig);
Object[] expected = new Object[] { "first", "second" };
ArrayAssertions.assertEquals(expected, output);

11. Arrays转换Json方法

@Test
public void array2json() {
    int[] intArray = new int[] {
        1,
        4,
        5
    };
    JSONArray jsonArray1 = JSONArray.fromObject(intArray);
    System.out.println("int[] intArray");
    System.out.println(jsonArray1);
    boolean[] boolArray = new boolean[] {
        true,
        false,
        true
    };
    System.out.println("boolean[] boolArray");
    JSONArray jsonArray2 = JSONArray.fromObject(boolArray);
    System.out.println(jsonArray2);
    int[][] int2Array = new int[][] {
        {
            1,
            2
        },
        {
            3,
            4
        }
    };
    JSONArray jsonArray3 = JSONArray.fromObject(int2Array);
    System.out.println("int[][] int2Array");
    System.out.println(jsonArray3);
    float[] floatArray = new float[] {
        0.1f,
        0.2f,
        0.3f
    };
    JSONArray jsonArray4 = JSONArray.fromObject(floatArray);
    System.out.println("float[] floatArray");
    System.out.println(jsonArray4);
    String[] strArray = new String[] {
        "hello",
        "hebut",
        "xiapi"
    };
    JSONArray jsonArray5 = JSONArray.fromObject(strArray);
    System.out.println("String[] strArray");
    System.out.println(jsonArray5);
}

运行结果:

int[] intArray
[1,4,5]
boolean[] boolArray
[true,false,true]
int[][] int2Array
[[1,2],[3,4]]
float[] floatArray
[0.1,0.2,0.3]
String[] strArray
["hello","hebut","xiapi"]

12. Collections转换Json方法

@Test
public void collections2json() {
    List list1 = new ArrayList();
    list1.add("first");
    list1.add("second");
    JSONArray jsonArray1 = JSONArray.fromObject(list1);
    System.out.println("List list1");
    System.out.println(jsonArray1);
    List < Student > list2 = new ArrayList < Student > ();
    list2.add(new Student("xiapi1", "男", 10));
    list2.add(new Student("xiapi2", "女", 11));
    list2.add(new Student("xiapi3", "男", 12));
    JSONArray jsonArray2 = JSONArray.fromObject(list2);
    System.out.println("List<Student> list2");
    System.out.println(jsonArray2);
}

运行结果:

List list1
["first","second"]
List<Student> list2
[{"age":10,"sex":"男","userName":"xiapi1"},{"age":11,"sex":"女","userName":"xiapi2"},{"age":12,"sex":"男","userName":"xiapi3"}]

13. Xml转换Json方法

@Test
public void xml2json() {
    String s = "<student>
                        <name id='n1'>xiapi</name>
                        <sex class='s1'>男</sex>
                        <age>20</age>
                    </student>";
    XMLSerializer x = new XMLSerializer();
    JSON json = x.read(s);
    System.out.println("XmlToJson");
    System.out.println(json.toString());
}

运行结果:

2012-5-21 19:01:03 net.sf.json.xml.XMLSerializer getType
信息: Using default type string
XmlToJson
{"name":{"@id":"n1","#text":"xiapi"},"sex":{"@id":"s1","#text":"男"},"age":"20"}

解析例子

/**
 * 使用json-lib构造和解析Json数据
 */
public class JsonTest {
    public static String BuildJson() {
        // JSON格式数据解析对象
        JSONObject jo = new JSONObject();

        // 下面构造两个map、一个list和一个Employee对象
        Map<String, String> map1 = new HashMap<String, String>();
        map1.put("name", "Alexia");
        map1.put("sex", "female");
        map1.put("age", "23");

        Map<String, String> map2 = new HashMap<String, String>();
        map2.put("name", "Edward");
        map2.put("sex", "male");
        map2.put("age", "24");

        List<Map> list = new ArrayList<Map>();
        list.add(map1);
        list.add(map2);

        Employee employee = new Employee();
        employee.setName("wjl");
        employee.setSex("female");
        employee.setAge(24);

        // 将Map转换为JSONArray数据
        JSONArray ja1 = JSONArray.fromObject(map1);
        // 将List转换为JSONArray数据
        JSONArray ja2 = JSONArray.fromObject(list);
        // 将Bean转换为JSONArray数据
        JSONArray ja3 = JSONArray.fromObject(employee);

        System.out.println("JSONArray对象数据格式:");
        System.out.println(ja1.toString());
        System.out.println(ja2.toString());
        System.out.println(ja3.toString());

        // 构造Json数据,包括一个map和一个Employee对象
        jo.put("map", ja1);
        jo.put("employee", ja2);
        System.out.println("\n最终构造的JSON数据格式:");
        System.out.println(jo.toString());
        return jo.toString();
    }

    /**
     * 解析Json数据
     */
    public static void ParseJson(String jsonString) {
        // 以employee为例解析,map类似
        JSONObject jb = JSONObject.fromObject(jsonString);
        JSONArray ja = jb.getJSONArray("employee");
        List<Employee> empList = new ArrayList<Employee>();
        // 循环添加Employee对象(可能有多个)
        for (int i = 0; i < ja.size(); i++) {
            Employee employee = new Employee();

            employee.setName(ja.getJSONObject(i).getString("name"));
            employee.setSex(ja.getJSONObject(i).getString("sex"));
            employee.setAge(ja.getJSONObject(i).getInt("age"));

            empList.add(employee);
        }

        System.out.println("\n将Json数据转换为Employee对象:");
        for (int i = 0; i < empList.size(); i++) {
            Employee emp = empList.get(i);
            System.out.println("name: " + emp.getName() + " sex: "
                    + emp.getSex() + " age: " + emp.getAge());
        }
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        ParseJson(BuildJson());
    }
}

运行结果:

JSON-lib解析json