Gson解析和json解析

来源:互联网 发布:济南市网络举报电话 编辑:程序博客网 时间:2024/06/08 00:53

json数据的简单介绍:

json数据是一种轻量级的数据交换格式,一键值对的形式表现的。用[]括起来的可以理解为数组、用{}括起来的可以理解为对象。

例如:

//对象"id":123,  "username":"ws",  "password":"admin",  "phone":"15333333333"//数组[{  "id":123,  "username":"ws",  "password":"admin",  "phone":"15333333333" }, {  "id":123,  "username":"ws",  "password":"admin",  "phone":"15333333333" }]

json解析是一种原声的解析方式,主要注意两种对象:JSONObject和JSONArray。

JSONObject———>{}
JSONArray———>[]

也就是说,遇到[]就解析为数组JSONArray,遇到{}就解析为JSONObject。

JSON原声解析:

下面拿一个小例子来说明:

"id":001,"username":"ws","pasword":"admin","action":[{"type":"eat",         "time":"6"},        {"type":"sleep"         "time":"11"        }]  }

接下来进行解析喽:

 public Map<String,Object> getDate(String json){ //最外层为{},所以我这里解析为Map        Map<String,Object> map = new HashMap<>();        try {        //一定不要忘了传参数哈            JSONObject jsonObject = new JSONObject(json);            int id = jsonObject.getInt("id");            map.put("id",id);            String username = jsonObject.getString("username");            map.put("username",username);            //使用opt防止出现空指针            String password = jsonObject.optString("password");            map.put("password",password);            //此处可以看到有一个[],所以解析为数组            JSONArray jsonArray = jsonObject.getJSONArray("action");            //存放数组,就需要有集合            List<PersonClass> list = new ArrayList<>();            //对集合进行遍历,取出所有的对象            for(int i = 0 ;i<jsonArray.length();i++){                jsonObject = jsonArray.getJSONObject(i);                String type = jsonObject.getString("type");                String time = jsonObject.getString("time");                //对象可以放Map中也可以放对象(类)中                PersonClass personClass = new PersonClass(type,time);                list.add(personClass);            }            //最后将集合整体放到Map中            map.put("action",list);            return map;        } catch (JSONException e) {            e.printStackTrace();        }        return null;    }    class PersonClass{        private String type;        private String time;        public String getType() {            return type;        }        public void setType(String type) {            this.type = type;        }        public String getTime() {            return time;        }        public void setTime(String time) {            this.time = time;        }        public PersonClass() {        }        public PersonClass(String type, String time) {            this.type = type;            this.time = time;        }    }

说明一下:

1、我们可以把解析出来的东西放到map里,或者解析成对象,我这里都一起使用了。

2、解析的时候我使用的有getXXX还有optXXX,个人推荐使用optXXX因为使用它可以避免空指针的出现。

3、之前也说过遇到[]就理解为数组、{}理解为对象,所以在解析的时候遇到[]就创建一个集合,遇到{}就创建一个对象或者Map。

这一块就是多加练习就OK的。

Gson解析:

Gson是在json的封装基础上产生的,有的时候用着很方便,但是没有原声的灵活,所以大多数都是两种一起使用。

1、使用Gson是将{}解析成了对象,所以就需要有一个相应的实体类;

2、类中的属性必须和json数据的key的字段一样;

3、json数据中的字段,在实体类中不一定包含该属性;

4、若{}中包涵{},只需在实体类中在创建一个内部类就可以;

5、若{}中包涵[],只需使得实体类中对应的属性为集合就可以了;

6、若一开始就是[],就要使用TypeToken

    //使用Gson进行解析Person    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) {            // TODO: handle exception        }        return t;    }    // 使用Gson进行解析 List<Person>    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) {        }        return list;    }

更多的Gson学习点击这里

0 0
原创粉丝点击