Java中org.json包解析Json格式总结

org.json包是一个用来beans,collections,maps,java arrays,XML和JSON互相转换的包,主要提供JSONObject和JSONArray类,是Java常用的Json解析工具。

下载

org.json包下载地址:https://github.com/douglascrockford/JSON-java

包对象

1. JSONObject

1. 是一个无序的键/值对集合。 
2. 它的表现形式是一个包裹在花括号的字符串,键和值之间使用冒号隔开,键值和键值之间使用逗号隔开。 
3. 内在形式是一个使用get()和opt()方法通过键来访问值,和使用put()方法通过键来添加或者替代值的对象。 
4. 值可以是任何这些类型:Boolean,JSONArray,JSONObject,Number和String,或者JOSONObject.NULL对象。 

public static void jsonObjectTest() {
    JSONObject jsonobj = new JSONObject("{'name':'xiazdong','age':20}");
    String name = jsonobj.getString("name");
    int age = jsonobj.getInt("age");
    System.out.println("name = " + name + ",age = " + age);
}
private static String prepareJSONObject() {
    JSONObject studentJSONObject = new JSONObject();
    try {
        studentJSONObject.put("name", "Jason");
        studentJSONObject.put("id", 20130001);
        studentJSONObject.put("phone", "13579246810");
    } catch(JSONException e) {
        e.printStackTrace();
    }
    return studentJSONObject.toString();
}

结果输出:

{"name":"Jason","id":20130001,"phone":"13579246810"}

2. JSONArray

同JSONObject相同属性

public static void jsonArrayTest() {
    JSONArray jsonarray = new JSONArray("[{'name':'xiazdong','age':20},{'name':'xzdong','age':15}]");
    for (int i = 0; i < jsonarray.length(); i++) {
        JSONObject jsonobj = jsonarray.getJSONObject(i);
        String name = jsonobj.getString("name");
        int age = jsonobj.getInt("age");
        System.out.println("name = " + name + ",age = " + age);
    }
}

嵌套的JSONObject和JSONArray代码

public static void jsonObjectAndArrayTest() {
    String jsonstring = "{'name':'xiazdong','age':20,'book':['book1','book2']}";
    JSONObject jsonobj = new JSONObject(jsonstring);

    String name = jsonobj.getString("name");
    System.out.println("name" + ":" + name);

    int age = jsonobj.getInt("age");
    System.out.println("age" + ":" + age);

    JSONArray jsonarray = jsonobj.getJSONArray("book");
    for (int i = 0; i < jsonarray.length(); i++) {
        String book = jsonarray.getString(i);
        System.out.println("book" + i + ":" + book);
    }
}

3. JSONStringer

1. 是一个用于快速构造JSON文本的工具 
2. JSONWriter的子类 
3. bject():开始一个对象,即添加{;enObject():结束一个对象,即添加} 
4. array():开始一个数组,即添加[; endArray():结束一个数组,即添加] 
5. key():表示添加一个key;value():表示添加一个value 

public static void jsonStringerTest() {
    JSONStringer stringer = new JSONStringer();
    stringer.object().key("name").value("xiazdong").key("age").value(20).endObject();
    System.out.println(stringer);
}

4. JSONTokener

它和JSONObject和JSONArray的构造函数一起使用,用于解析JSON源字符串。

public static void JSONTokenerTest() throws FileNotFoundException {
    JSONObject jsonobj = new JSONObject(new JSONTokener(new FileReader(new File("1.txt"))));
    System.out.println(jsonobj.getJSONObject("session").getJSONArray("signing").getJSONObject(1).getJSONObject("book").getString("title"));
}

格式转换

1. String 转换为JSON对象

public class StringToJSON {
    public static void main(String[] args) throws JSONException{
        //定义JSON字符串
        String jsonStr = "{\"id\": 2," + 
                " \"title\": \"json title\", " + 
                "\"config\": {" +
                    "\"width\": 34," +
                    "\"height\": 35," +
                "}, \"data\": [" +
                    "\"JAVA\", \"JavaScript\", \"PHP\"" +
                "]}";
        
        //转换成为JSONObject对象
        JSONObject jsonObj = new JSONObject(jsonStr);
        
        //从JSONObject对象中获取数据
        JavaBean bean = new JavaBean();
        
        //根据属性名称获取int型数据;
        bean.setId(jsonObj.getInt("id"));     
        
        //根据属性名获取String数据;
        bean.setTitle(jsonObj.getString("title")); 
        
        //根据属性名获取JSONObject类
        JSONObject config = jsonObj.getJSONObject("config");
        bean.setWidth(config.getInt("width"));
        bean.setHeight(config.getInt("height"));
        
        //根据属性名获取JSONArray数组
        JSONArray data = jsonObj.getJSONArray("data");
        for(int index = 0, length = data.length(); index < length; index++) {
        }        
    }
}

2. JSON对象转换为String字符串

public static void main(String[] args) throws JSONException {
    //创建JSONObject对象
    JSONObject json = new JSONObject();

    //向json中添加数据
    json.put("username", "wanglihong");
    json.put("height", 12.5);
    json.put("age", 24);

    //创建JSONArray数组,并将json添加到数组
    JSONArray array = new JSONArray();
    array.put(json);

    //转换为字符串
    String jsonStr = array.toString();

    System.out.println(jsonStr);
}

最终输出结果为: [{"username":"wanglihong","height":12.5,"age":24}]

3. 集合转换为JSONArray对象


public static void main(String[] args) throws JSONException {
    //初始化ArrayList集合并添加数据
    List < String > list = new ArrayList < String > ();
    list.add("username");
    list.add("age");
    list.add("sex");
    //初始化HashMap集合并添加数组
    Map map = new HashMap();
    map.put("bookname", "CSS3实战");
    map.put("price", 69.0);
    //初始化JSONArray对象,并添加数据
    JSONArray array = new JSONArray();
    array.put(list);
    array.put(map);
    //生成的JSON字符串为:[["username","age","sex"],{"price":69,"bookname":"CSS3实战"}]
}

解析例子

public class OrgJsonTest {
    public static String BuildJson() throws JSONException {
        // 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 ja = new JSONArray();
        ja.put(map1);

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

        // 将Javabean转换为Json数据(需要Map中转)
        JSONObject jo1 = JsonHelper.toJSON(employee);

        System.out.println("\n仅含Employee对象的Json数据格式:");
        System.out.println(jo1.toString());

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

        return jo.toString();
    }
    /**
     * 解析Json数据
     */
    public static void ParseJson(String jsonString) throws JSONException,
            ParseException {
        JSONObject jo = new JSONObject(jsonString);
        JSONArray ja = jo.getJSONArray("map");

        System.out.println("\n将Json数据解析为Map:");
        System.out.println("name: " + ja.getJSONObject(0).getString("name")
                + " sex: " + ja.getJSONObject(0).getString("sex") + " age: "
                + ja.getJSONObject(0).getInt("age"));

        String jsonStr = jo.getString("employee");
        Employee emp = new Employee();
        JsonHelper.toJavaBean(emp, jsonStr);

        System.out.println("\n将Json数据解析为Employee对象:");
        System.out.println("name: " + emp.getName() + " sex: " + emp.getSex()
                + " age: " + emp.getAge());
    }
    public static void main(String[] args) throws JSONException, ParseException {
        // TODO Auto-generated method stub

        ParseJson(BuildJson());
    }
}

运行结果:

java 解析json格式

总结

json解析的步骤:

1. 需要进行创建Gson解析器

2. 创建JSONObject对象

3. 将json数据转为为相应的数据

版权声明:本文为JAVASCHOOL原创文章,未经本站允许不得转载。