一. JSON相关类介绍

Android系统内置了对JSON的支持,包括JSONArray、JSONObject、JSONStringer、JSONExeception等类。

在Android中,JSON相关类主要有如下四个:

描述
JSONArray 输出一个JSON数组,可实现Java集合与JSON字符串之间的相互转换。
JSONObject 输出一个JSON对象,可实现Java对象与JSON字符串之间的相互转换。
JSONStringer 快速生成JSON文本。
JSONTokener 解析一个JSON(RFC 4627)编码字符串,并转换成相应的对象。

其中,JSONArray和JSONObject对象最为常用。

二. JSONObject对象

2.1 JSONObject对象的创建:

语法如下:

JSONObject()
JSONObject(Map copyFrom)
JSONObject(JSONTokener readFrom)
JSONObject(String json)
JSONObject(JSONObject copyFrom, String[] names)

2.2 JSONObject的主要方法:

2.2.1 获取JSONObject对象元素的方法:

返回值 函数名 描述
Object get(String name) 获取指定name处的数组元素。
Xxx getXxx(String name) 同上。其中,Xxx可以是以下值:Boolean、Long、Double、Int、JSONArray、JSONObject、String。
Object opt(String name) 获取指定name处的数组元素。
Xxx optXxx(String name) 同上。

备注:

get()与opt()的区别如下:

  • get()取值不正确时会抛出异常,必须用try catch或者throw包起来;
  • opt()取值不正确时,则会试图进行转化或者输出友好值,不会抛出异常。

2.2.2 设置JSONArray对象元素的方法:

返回值 函数名 描述
JSONObject put(String name, Xxx value) 设置name属性的值为value。
JSONObject putOpt(String name, Object value) 同上。

2.2.3 其他常用函数
|返回值|函数名|描述|
|–
|boolean|has(String name)|当含有属性为name的键值对时,则返回true;否则返回false。|
|boolean|isNull(String name)|当属性为name的值为空时,则返回true;否则返回false。|
|Iterator|keys()|返回对象属性的迭代器。|
|int|length()|返回对象中键值对的数目。|
|JSONArray|names()|返回一个包含该对象的字符串名称的数组。|
|Object |remove(String name)|移除name属性的映射。|
|String|toString()|返回JSON字符串。|

2.3 示例:

2.3.1 将JSON字符串转换成JSONObject:

String json = "{'a': 1, 'b': 2, 'c': 3}";
JSONObject jsonObject = new JSONObject(json);

// 输出jsonObject的字符串数据
String output = "";
try {
    output += "a: " + jsonObject.getString("a") + ", ";
    output += "b: " + jsonObject.getString("b") + ", ";
    output += "c: " + jsonObject.getString("c");                
} catch (JSONException e) {
    e.printStackTrace();
}
Toast.makeText(this, output, Toast.LENGTH_LONG).show();

输出:

a: 1, b: 2, c: 3

2.3.2 将JSONObject转换成JSON字符串:

JSONObject jsonObject = new JSONObject();
jsonObject.put("a", 1);
jsonObject.put("b", 2);
jsonObject.put("c", 3);

Toast.makeText(this, jsonObject.toString(), Toast.LENGTH_LONG).show();

输出:

{"a": 1, "b": 2, "c": 3}

三. JSONArray对象

3.1 JSONArray对象的创建:

语法如下:

JSONArray()
JSONArray(Collection copyFrom)
JSONArray(JSONTokener readFrom)
JSONArray(String json)
JSONArray(Object array)

3.2 JSONArray的主要方法:

3.2.1 获取JSONArray对象元素的方法:

返回值 函数名 描述
Object get(int index) 获取指定index处的元素。
Xxx getXxx(int index) 同上。其中,Xxx可以是以下值:Boolean、Long、Double、Int、JSONArray、JSONObject、String。
Object opt(int index) 获取指定index处的数组元素。
Xxx optXxx(int index) 同上。

备注:

get()与opt()的区别如下:

  • get()取值不正确时会抛出异常,必须用try catch或者throw包起来;
  • opt()取值不正确时,则会试图进行转化或者输出友好值,不会抛出异常。

3.2.2 设置JSONArray对象元素的方法:

返回值 函数名 描述
JSONArray put(int index, Xxx value) 设置index处的值为value。 Xxx可以为以下值:int、long、double、boolean、Object。
JSONArray put(Xxx value) 将value值追加到该对象中。Xxx可以为以下值:int、long、double、boolean、Object。

3.2.3 其他常用函数
|返回值|函数名|描述|
|–
|boolean|isNull(int index)|当指定index处的值为空时,则返回true;否则返回false。|
|String |join(String separator)|返回一个用separator分隔数组元素的字符串。|
|int|length()|返回对象中键值对的数目。|
|JSONArray|names()|返回一个包含该对象的字符串名称的数组。|
|Object |remove(int index)|移除index处的映射。|
|String|toString()|返回JSON字符串。|

3.3 示例:

3.3.1 将JSON字符串转换成JSONArray:

String json = "[{'a': 1, 'b': 2, 'c': 3}, {'d': 4, 'e': 5, 'f': 6}]";

try {
    JSONArray jsonArray = new JSONArray(json);
    String output = "";
    for(int i = 0; i < jsonArray.length(); i++) {
        //获取每一个JsonObject对象
        JSONObject jsonObjectItem = jsonArray.getJSONObject(i);
        output += jsonObjectItem.toString();
    }

    Toast.makeText(this, output, Toast.LENGTH_LONG).show();
} catch (JSONException e) {
    e.printStackTrace();
}

输出:

{"a": 1, "': 2, "c": 3}, {"d": 4, "e": 5, "f": 6}

四. JSON工具库的封装

这是我写的JSON工具库的封装类,其中从Object类转换为JSON对象这一部分的函数封装还未完成。希望阅读本文的读者可以指点迷津,thx~。

这是我写的JSON工具类:

public class JsonUtil {

    /*
    * 将JSON字符串转换成JSONObject
    * */
    public JSONObject ToJSONObeject(String jsonString) {
        try {
            return new JSONObject(jsonString);
        } catch (JSONException e) {
            e.printStackTrace();
            return null;
        }
    }

    /*
    * 将JSON字符串转换成JSONArray
    * */
    public JSONArray ToJSONArray(String jsonString) {
        try {
            return new JSONArray(jsonString);

        } catch (JSONException e) {
            e.printStackTrace();
        }
        return null;
    }

    /*
    * 将ArrayList数组转换成JSON字符串
    * */
    public String ToJSONString(ArrayList arrayList) {

        JSONObject jsonObject = new JSONObject();
        // 遍历ArrayList数组,并将数组的值转换成jsonObject
        for(int i = 0; i < arrayList.size(); i++) {
            try {
                jsonObject.put(i + "", arrayList.get(i));

            } catch (JSONException e) {
                e.printStackTrace();
            }
        }

        return jsonObject.toString();
    }
}

五. 该JSON工具库的使用:

5.1 将JSON字符串转换成JSONObject:

实例:

String json = "{'a': 1, 'b': 2, 'c': 3}";
JSONObject jsonObject = new JsonUtil().ToJSONObeject(json);

// 输出jsonObject的字符串数据
String output = "";
try {
    output += "a: " + jsonObject.getString("a") + ", ";
    output += "b: " + jsonObject.getString("b") + ", ";
    output += "c: " + jsonObject.getString("c");                
} catch (JSONException e) {
    e.printStackTrace();
}
Toast.makeText(this, output, Toast.LENGTH_LONG).show();

输出:

a: 1, b: 2, c: 3

5.2 将JSON字符串转换成JSONArray:

String json = "[{'a': 1, 'b': 2, 'c': 3}, {'d': 4, 'e': 5, 'f': 6}]";

try {
    JSONArray jsonArray = new JsonUtil().ToJSONArray(json);

    String output = "";
    for(int i = 0; i < jsonArray.length(); i++) {
        //获取每一个JsonObject对象
        JSONObject jsonObjectItem = jsonArray.getJSONObject(i);
        output += jsonObjectItem.toString();
    }

    Toast.makeText(this, output, Toast.LENGTH_LONG).show();
} catch (JSONException e) {
    e.printStackTrace();
}

输出:

{"a": 1, "': 2, "c": 3}, {"d": 4, "e": 5, "f": 6}

5.3 将ArrayList数组转换成JSON字符串:

ArrayList al = new ArrayList();
al.add(1);
al.add(2);
al.add(3);

String jsonString = new JsonUtil().ToJSONString(al);

Toast.makeText(this, jsonString, Toast.LENGTH_LONG).show();

输出:

{"0": 1, "1": 2, "2": 3}
本文作者:子匠_Zijor,转载请注明出处:http://www.dengzhr.com/others/mobile/android/759