Android JSON数据格式的解析,与简单对象、带泛型的List和Map的转换,以及GSON的使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liuwan1992/article/details/52830948

首先,这里要先说一下 JSON 的语法。

1、使用 JSON 语法创建对象


        如图,创建 object 时,总是以 “{” 开始,以 “}” 结束,对象的每个属性和属性值之间以英文冒号 “:” 隔开,多个属性定义之间以英

文逗号 “,” 隔开。语法格式如下:

object = 
{
    name1 : value1,
    name2 : value2,
    ...
}
        使用 JSON 语法创建 JavaScript 对象是,属性值不仅可以是普通字符串,也可以是任何基本数据类型,还可以是函数、数组,

至是另外一个 JSON语法创建的对象。例如:

person = 
{
    name : 'liuwan',
    age : 24,
    // 使用 JSON 语法为其指定一个属性
    son : {
        blog : 'csdn',
        git : 'github'
    },
    // 使用 JSON 语法为其直接分配一个方法
    info : function()
    {
        document.writeln("姓名:" + this.name);
    }
}

2、使用 JSON 语法创建数


        如图,JSON 创建数组总是以英文方括号 “[” 开始,然后依次放入数组元素,元素与元素之间以英文逗号 “,” 隔开,最后以英文反

方括号 “]” 结束。使用 JSON创建数组的语法格式如下:

arr = [value1 , value2 ...]


3、Android 对 Json 的支持

        幸运的是,Android 系统内置了对 JSON 的支持,在 Android SDK 的 org.json 包下提供了JSONObject、JSONArray 等类,通过

这些类可以很方便的完成 JSON 字符串与 JSONObject、JSONArray 之间的互相转换。

        JSONObject :代表一个 JSON 对象,它可完成 Java 对象与 JSON 字符串之间的相互转换。

        JSONArray :代表一个 JSON 数组,它可完成 Java 集合与 JSON字符串之间的相互转换。

下面是一个Android内置 JSON 解析的 Demo:

public class JsonTools {

    public JsonTools() {
    }

    public static Person getPerson(String key, String jsonString) {
        Person person = new Person();
        try {
            JSONObject jsonObject = new JSONObject(jsonString);
            JSONObject personObject = jsonObject.getJSONObject("person");
            person.setId(personObject.getInt("id"));
            person.setName(personObject.getString("name"));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return person;
    }

    public static List<Person> getPersons(String key, String jsonString) {
        List<Person> list = new ArrayList<Person>();
        try {
            JSONObject jsonObject = new JSONObject(jsonString);
            JSONArray jsonArray = jsonObject.getJSONArray(key);
            for (int i = 0; i < jsonArray.length(); i++) {
                JSONObject jsonObject2 = jsonArray.getJSONObject(i);
                Person person = new Person();
                person.setId(jsonObject2.getInt("id"));
                person.setName(jsonObject2.getString("name"));
                list.add(person);
            }
        } catch (Exception e) {
        }
        return list;
    }

    public static List<String> getList(String key, String jsonString) {
        List<String> list = new ArrayList<String>();
        try {
            JSONObject jsonObject = new JSONObject(jsonString);
            JSONArray jsonArray = jsonObject.getJSONArray(key);
            for (int i = 0; i < jsonArray.length(); i++) {
                String msg = jsonArray.getString(i);
                list.add(msg);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return list;
    }

    public static List<Map<String, Object>> listKeyMaps(String key, String jsonString) {
        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
        try {
            JSONObject jsonObject = new JSONObject(jsonString);
            JSONArray jsonArray = jsonObject.getJSONArray(key);
            for (int i = 0; i < jsonArray.length(); i++) {
                JSONObject jsonObject2 = jsonArray.getJSONObject(i);
                Map<String, Object> map = new HashMap<String, Object>();
                Iterator<String> iterator = jsonObject2.keys();
                while (iterator.hasNext()) {
                    String json_key = iterator.next();
                    Object json_value = jsonObject2.get(json_key);
                    if (json_value == null) {
                        json_value = "";
                    }
                    map.put(json_key, json_value);
                }
                list.add(map);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return list;
    }
    
}

4、GSON

        GSON 是一个 Java 类库,可以把 Java 对象转换成 JSON 数据,也可以把 JSON 字符串转换成 Java 对象,支持任意复杂的 

Java 对象,包括没有源代码的对象。

下面是一个利用 GSON 解析 JSON 的 Demo:

public class GsonTools {

    public GsonTools() {
    }

    public static <T> T getPerson(String jsonString, Class<T> cls) {
        T t = null;
        try {
            Gson gson = new Gson();
            t = gson.fromJson(jsonString, cls);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return t;
    }

    public static <T> List<T> getPersons(String jsonString, Class<T> cls) {
        List<T> list = new ArrayList<T>();
        try {
            Gson gson = new Gson();
            list = gson.fromJson(jsonString, new TypeToken<List<T>>() {
            }.getType());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return list;
    }

    public static List<String> getList(String jsonString) {
        List<String> list = new ArrayList<String>();
        try {
            Gson gson = new Gson();
            list = gson.fromJson(jsonString, new TypeToken<List<String>>() {
            }.getType());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return list;
    }

    public static List<Map<String, Object>> listKeyMaps(String jsonString) {
        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
        try {
            Gson gson = new Gson();
            list = gson.fromJson(jsonString, new TypeToken<List<Map<String, Object>>>() {
            }.getType());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return list;
    }

}
最后附上 GSON 的下载地址: https://github.com/google/gson

猜你喜欢

转载自blog.csdn.net/liuwan1992/article/details/52830948