Gson解析Json数据(一)单类型格式

来源:互联网 发布:pdf转ppt软件在线 编辑:程序博客网 时间:2024/06/07 07:01

Gson解析Json数据(一)单类型格式

添加Gson开源库的依赖

  1. 点击 File -> Project Structure(快捷键 Ctrl + Alt + Shift + s),点击Project Structure界面左侧的modules。(在这里我的module是my_test)
    这里写图片描述
  2. 在 “Dependencies” 标签界面下,点击右边绿色的 “+”号,选择第一个选项“libs or directories…”,输入关键字”gson”,enter搜索
    这里写图片描述

无嵌套Json数据读写

单对象无嵌套Json数据解析

若有以下这个类:

 public class Obj {        private int x;        private int y;        Obj(int x, int y) {            this.x = x;            this.y = y;        }        @Override        public String toString() {            return "Obj{" +                    "x='" + x +                    ", y=" + y +                    '}';        }    }

对于数据String jsonFromServer2=”{‘x’:20, ‘y’:10}”;
则可如下解析:

 String jsonData="{'x':20, 'y':10}";    Gson gson = new Gson();    Obj obj = gson.fromJson(jsonData, Obj.class);            //将jsonData数据以Obj对象进行解析    System.out.println(obj);

多对象无嵌套Json数据解析

还是以上面的Obj类为例,对于多对象,有很多种类型,这里采用LinkeList类型为例进行说明:
对于该LinkedList数据:

 List<Obj> objList = new LinkedList<>();        for(int i = 0; i < 10; ++i) {            objList.add(new Obj(i, 2*i));        }

以下进行解析:

Gson gson = new Gson();String jsonData = gson.toJson(objList);Type listType = new TypeToken<LinkedList<Obj>>(){}.getType();    //获得该对象类型LinkedList<Obj> objs = gson.fromJson(jsonData, listType);       //将Json数据读取到LinkedList中

遍历获得的List:

 for(Obj o : objs) {     System.out.println(o); }

嵌套Json数据读写

规则的类成员

有时候,一个类A中会有类B的成员,如下面:

static class Obj {    private int x;    private int y;    private interObj interObj;    Obj(int x, int y, interObj interObj) {        this.x = x;        this.y = y;        this.interObj = interObj;    }    static class interObj {        private int a;        private int b;        public interObj(int a, int b) {            this.a = a;            this.b = b;        }        @Override        public String toString() {            return "interObj{" +                    "a='" + a +                    ", b=" + b +                    '}';        }    }    interObj getInterObj() {        return interObj;    }    @Override    public String toString() {        return "Obj{" +                "x='" + x +                ", y=" + y +                '}';    }}

生成的数据如下格式:
[{“x”:0,”y”:0,”interObj”:{“a”:1,”b”:2}},{“x”:1,”y”:2,”interObj”:{“a”:2,”b”:3}},{“x”:2,”y”:4,”interObj”:{“a”:3,”b”:4}},{“x”:3,”y”:6,”interObj”:{“a”:4,”b”:5}},{“x”:4,”y”:8,”interObj”:{“a”:5,”b”:6}},{“x”:5,”y”:10,”interObj”:{“a”:6,”b”:7}},{“x”:6,”y”:12,”interObj”:{“a”:7,”b”:8}},{“x”:7,”y”:14,”interObj”:{“a”:8,”b”:9}},{“x”:8,”y”:16,”interObj”:{“a”:9,”b”:10}},{“x”:9,”y”:18,”interObj”:{“a”:10,”b”:11}}]
对于此种多对象嵌套型Json数据,可以对比多对象非嵌套型进行解析,代码如下:
首先,生成Json数据:

    List<Obj> objList = new LinkedList<>();    for(int i = 0; i < 10; ++i) {        objList.add(new Obj(i, 2*i, new Obj.interObj(i + 1, i + 2)));    }

获取数据进行解析:

    Gson gson = new Gson();    String jsonData = gson.toJson(objList);    System.out.println(jsonData);    Type listType = new TypeToken<LinkedList<Obj>>(){}.getType();    LinkedList<Obj> objs = gson.fromJson(jsonData, listType);    for(Obj o : objs) {        System.out.println(o.getInterObj());    }

链表类成员

这种情况下,每个对象生成的Json数据长度不一致,如下:
[{“x”:0,”y”:0,”interObjList”:[{“a”:0,”b”:1}]},{“x”:1,”y”:2,”interObjList”:[{“a”:0,”b”:1},{“a”:1,”b”:2}]},{“x”:2,”y”:4,”interObjList”:[{“a”:0,”b”:1},{“a”:1,”b”:2},{“a”:2,”b”:3}]},{“x”:3,”y”:6,”interObjList”:[{“a”:0,”b”:1},{“a”:1,”b”:2},{“a”:2,”b”:3},{“a”:3,”b”:4}]},{“x”:4,”y”:8,”interObjList”:[{“a”:0,”b”:1},{“a”:1,”b”:2},{“a”:2,”b”:3},{“a”:3,”b”:4},{“a”:4,”b”:5}]},{“x”:5,”y”:10,”interObjList”:[{“a”:0,”b”:1},{“a”:1,”b”:2},{“a”:2,”b”:3},{“a”:3,”b”:4},{“a”:4,”b”:5},{“a”:5,”b”:6}]},{“x”:6,”y”:12,”interObjList”:[{“a”:0,”b”:1},{“a”:1,”b”:2},{“a”:2,”b”:3},{“a”:3,”b”:4},{“a”:4,”b”:5},{“a”:5,”b”:6},{“a”:6,”b”:7}]},{“x”:7,”y”:14,”interObjList”:[{“a”:0,”b”:1},{“a”:1,”b”:2},{“a”:2,”b”:3},{“a”:3,”b”:4},{“a”:4,”b”:5},{“a”:5,”b”:6},{“a”:6,”b”:7},{“a”:7,”b”:8}]},{“x”:8,”y”:16,”interObjList”:[{“a”:0,”b”:1},{“a”:1,”b”:2},{“a”:2,”b”:3},{“a”:3,”b”:4},{“a”:4,”b”:5},{“a”:5,”b”:6},{“a”:6,”b”:7},{“a”:7,”b”:8},{“a”:8,”b”:9}]},{“x”:9,”y”:18,”interObjList”:[{“a”:0,”b”:1},{“a”:1,”b”:2},{“a”:2,”b”:3},{“a”:3,”b”:4},{“a”:4,”b”:5},{“a”:5,”b”:6},{“a”:6,”b”:7},{“a”:7,”b”:8},{“a”:8,”b”:9},{“a”:9,”b”:10}]}]
但是,解析方法仍然与上述方法一致。

    static class Obj {        private int x;        private int y;        private LinkedList<interObj> interObjList;   //链表类成员        Obj(int x, int y, LinkedList<interObj> list) {            this.x = x;            this.y = y;            this.interObjList = list;        }        static class interObj {            private int a;            private int b;            public interObj(int a, int b) {                this.a = a;                this.b = b;            }            @Override            public String toString() {                return "interObj{" +                        "a='" + a +                        ", b=" + b +                        '}';            }        }        LinkedList<interObj> getInterObjList()        {            return interObjList;        }        @Override        public String toString() {            return "Obj{" +                    "x='" + x +                    ", y=" + y +                    '}';        }    }

则如下解析:

    List<Obj> objList = new LinkedList<>();    for(int i = 0; i < 10; ++i) {        LinkedList<Obj.interObj> list = new LinkedList<>();        for(int j = 0; j < i + 1; ++j) {            list.add(new Obj.interObj(j, j + 1));        }        objList.add(new Obj(i, 2*i, list));    }    Gson gson = new Gson();    String jsonData = gson.toJson(objList);    System.out.println(jsonData);    Type listType = new TypeToken<LinkedList<Obj>>(){}.getType();    LinkedList<Obj> objs = gson.fromJson(jsonData, listType);    for(Obj o : objs) {        LinkedList<Obj.interObj> interObjs = o.getInterObjList();        for(Obj.interObj interObj : interObjs) {            System.out.println(interObj);        }    }
原创粉丝点击