• Android 使用Gson解析json案例具体解释


    一、眼下解析json有三种工具:org.json(Java经常使用的解析),fastjson(阿里巴巴project师开发的),Gson(Google官网出的),解析速度最快的是Gson,下载地址:https://code.google.com/p/google-gson/

    二、什么是JSON:

    JSON即JavaScript Object Natation, 它是一种轻量级的数据交换格式, 与XML一样, 是广泛被採用的client和服务端交互的解决方式.

    三、JSON对象:

    JSON中对象(Object)以”{“開始, 以”}”结束. 对象中的每个item都是一个key-value对, 表现为”key:value”的形式, key-value对之间使用逗号分隔. 如:{“name”:”coolxing”, “age”=24, “male”:true, “address”:{“street”:”huiLongGuan”, “city”:”beijing”, “country”:”china”}}. JSON对象的key仅仅能是string类型的, 而value能够是string, number, false, true, null, Object对象甚至是array数组, 也就是说能够存在嵌套的情况.

    四、JSON数组:

    JSON数组(array)以”[“開始, 以”]”结束, 数组中的每个元素能够是string, number, false, true, null, Object对象甚至是array数组, 数组间的元素使用逗号分隔. 如[“coolxing”, 24, {“street”:”huiLongGuan”, “city”:”beijing”, “country”:”china”}].

    五、Gson的基本用法:
    通过获取JsonReader对象解析JSON数据:

    String jsonData = "[{"username":"arthinking","userId":001},{"username":"Jason","userId":002}]";
    try{
        JsonReader reader = new JsonReader(new StringReader(jsonData));
        reader.beginArray();
        while(reader.hasNext()){
            reader.beginObject();
            while(reader.hasNext()){
                String tagName = reader.nextName();
                if(tagName.equals("username")){
                    System.out.println(reader.nextString());
                }
                else if(tagName.equals("userId")){
                    System.out.println(reader.nextString());
                }
            }
            reader.endObject();
        }
        reader.endArray();
    }
    catch(Exception e){
        e.printStackTrace();
    }

    通过把JSON数据映射成一个对象,使用Gson对象的fromJson()方法获取一个对象数组进行操作:
    创建JSON数据相应的一个POJO对象User.java:

    public class User {
        private String username ;
        private int userId ;
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }
        public int getUserId() {
            return userId;
        }
        public void setUserId(int userId) {
            this.userId = userId;
        }
    }

    使用Gson对象获取User对象数据进行相应的操作:

    Type listType = new TypeToken<LinkedList<User>>(){}.getType();
    Gson gson = new Gson();
    LinkedList<User> users = gson.fromJson(jsonData, listType);
    for (Iterator iterator = users.iterator(); iterator.hasNext();) {
        User user = (User) iterator.next();
        System.out.println(user.getUsername());
        System.out.println(user.getUserId());
    }

    假设要处理的JSON字符串仅仅包括一个JSON对象,则能够直接使用fromJson获取一个User对象:

    String jsonData = "{"username":"arthinking","userId":001}";
    Gson gson = new Gson();
    User user = gson.fromJson(jsonData, User.class);
    System.out.println(user.getUsername());
    System.out.println(user.getUserId());

    解析复杂实例:

    数据格式:(对于格式比較乱json数据,我们能够使用HIJSON工具进行代码的格式化!)

    {
        "data": {
            "partnerteamlist": [
                {
                    "pteamId": 72825,
                    "ptitle": "随摄影/共6套服装/准爸准妈共拍/免费肚画/底片全送。",
                    "pteamprice": 288
                },
                {
                    "pteamId": 72598,
                    "ptitle": "随摄影/拍摄200张/4本相冊/品质拍摄/送全新婚纱。",
                    "pteamprice": 2888
                },
                {
                    "pteamId": 72613,
                    "ptitle": "随摄影/送全新婚纱/多外景拍摄/服装不限数量/绝无二次消费!",
                    "pteamprice": 3699
                },
                {
                    "pteamId": 72638,
                    "ptitle": "随摄影/服装不限数量/高品质拍摄260张/送全新婚纱。",
                    "pteamprice": 4299
                },
                {
                    "pteamId": 72716,
                    "ptitle": "随摄影/3组服装造型/内外景拍摄/全然透明消费!",
                    "pteamprice": 388
                }
            ],
            "liketeamlist": [
                {
                    "lteamId": 65886,
                    "ltitle": "爱丽尔婚纱摄影/2本相冊/6套服装造型/拍摄不限最低拍摄150张。",
                    "limage": "http://img.pztuan.com/upfile/team/2013/0712/201307120257551465.jpg",
                    "lteamprice": 518,
                    "lmarketprice": 3999
                },
                {
                    "lteamId": 57133,
                    "ltitle": "陶冶摄影/婚纱闺蜜/6组服装造型/拍摄不低于120张!",
                    "limage": "http://img.pztuan.com/upfile/team/2013/0628/201306281115249737.jpg",
                    "lteamprice": 580,
                    "lmarketprice": 3380
                }
            ],
            "feedbacks": {
                "feedbacklist": [
                    {
                        "comment": "5分",
                        "createtime": "2014.07.08 13:38",
                        "score": 5,
                        "username": "l***2"
                    }
                ],
                "totalcount": 1,
                "totalscore": 5
            }
        },
        "err": null,
        "state": 1
    }

    实体类(里面的成员变量和接口的返回值名称一 一相应才干保证解析正确):

    import java.util.List;
    
    public class OtherDetail {
    
        private int state;
        private List<err> err;
        private OtherDetail2 data;
    
        public int getState() {
            return state;
        }
    
        public void setState(int state) {
            this.state = state;
        }
    
        public List<err> getErr() {
            return err;
        }
    
        public void setErr(List<err> err) {
            this.err = err;
        }
    
        public OtherDetail2 getData() {
            return data;
        }
    
        public void setData(OtherDetail2 data) {
            this.data = data;
        }
    
        public class OtherDetail2 {
            private List<partnerteamlist> partnerteamlist;
            private List<liketeamlist> liketeamlist;
            private List<feedbacks> feedbacks;
    
            public List<liketeamlist> getLiketeamlist() {
                return liketeamlist;
            }
    
            public void setLiketeamlist(List<liketeamlist> liketeamlist) {
                this.liketeamlist = liketeamlist;
            }
    
            public List<feedbacks> getFeedbacks() {
                return feedbacks;
            }
    
            public void setFeedbacks(List<feedbacks> feedbacks) {
                this.feedbacks = feedbacks;
            }
    
            public class partnerteamlist {
                private int pteamId;
                private String ptitle;
                private Double pteamprice;
    
                public int getPteamId() {
                    return pteamId;
                }
    
                public void setPteamId(int pteamId) {
                    this.pteamId = pteamId;
                }
    
                public String getPtitle() {
                    return ptitle;
                }
    
                public void setPtitle(String ptitle) {
                    this.ptitle = ptitle;
                }
    
                public Double getPteamprice() {
                    return pteamprice;
                }
    
                public void setPteamprice(Double pteamprice) {
                    this.pteamprice = pteamprice;
                }
    
            }
    
            public class liketeamlist {
                private int lteamId;
                private String ltitle;
                private String limage;
                private Double lteamprice;
                private Double lmarketprice;
    
                public int getLteamId() {
                    return lteamId;
                }
    
                public void setLteamId(int lteamId) {
                    this.lteamId = lteamId;
                }
    
                public String getLtitle() {
                    return ltitle;
                }
    
                public void setLtitle(String ltitle) {
                    this.ltitle = ltitle;
                }
    
                public String getLimage() {
                    return limage;
                }
    
                public void setLimage(String limage) {
                    this.limage = limage;
                }
    
                public Double getLteamprice() {
                    return lteamprice;
                }
    
                public void setLteamprice(Double lteamprice) {
                    this.lteamprice = lteamprice;
                }
    
                public Double getLmarketprice() {
                    return lmarketprice;
                }
    
                public void setLmarketprice(Double lmarketprice) {
                    this.lmarketprice = lmarketprice;
                }
            }
    
            public class feedbacks {
                private int totalcount;
                private Double totalscore;
                private List<feedbacklist> feedbacklist;
    
                public int getTotalcount() {
                    return totalcount;
                }
    
                public void setTotalcount(int totalcount) {
                    this.totalcount = totalcount;
                }
    
                public Double getTotalscore() {
                    return totalscore;
                }
    
                public void setTotalscore(Double totalscore) {
                    this.totalscore = totalscore;
                }
    
                public List<feedbacklist> getFeedbacklist() {
                    return feedbacklist;
                }
    
                public void setFeedbacklist(List<feedbacklist> feedbacklist) {
                    this.feedbacklist = feedbacklist;
                }
    
                public class feedbacklist {
                    private String username;
                    private String comment;
                    private String createtime;
                    private Double score;
    
                    public String getUsername() {
                        return username;
                    }
    
                    public void setUsername(String username) {
                        this.username = username;
                    }
    
                    public String getComment() {
                        return comment;
                    }
    
                    public void setComment(String comment) {
                        this.comment = comment;
                    }
    
                    public String getCreatetime() {
                        return createtime;
                    }
    
                    public void setCreatetime(String createtime) {
                        this.createtime = createtime;
                    }
    
                    public Double getScore() {
                        return score;
                    }
    
                    public void setScore(Double score) {
                        this.score = score;
                    }
    
                }
            }
    
            public List<partnerteamlist> getPartnerteamlist() {
                return partnerteamlist;
            }
    
            public void setPartnerteamlist(List<partnerteamlist> partnerteamlist) {
                this.partnerteamlist = partnerteamlist;
            }
        }
    
        public class err {
            private int code;
            private String msg;
    
            public int getCode() {
                return code;
            }
    
            public void setCode(int code) {
                this.code = code;
            }
    
            public String getMsg() {
                return msg;
            }
    
            public void setMsg(String msg) {
                this.msg = msg;
            }
        }
    }

    注意上面内部类的运用。
    解析:

    Gson gson = new Gson();
    OtherDetail d = gson.fromJson(jsonString,Detail.class);//取值的时候就从父类一层一层调子类成员(重要)
    
  • 相关阅读:
    [算法初步]希尔排序
    逆波兰表达式1(简介)
    [数据结构]之链表
    [数据结构]之栈
    [算法初步]之归并排序
    [算法初步]之快速排序
    [算法初步]之冒泡排序
    逆波兰表达式2中缀转后缀表达式)
    [算法初步]之简单选择排序
    [数据结构]之顺序表
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4492138.html
Copyright © 2020-2023  润新知