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);//取值的时候就从父类一层一层调子类成员(重要)
时间: 2024-07-31 15:36:21

Android 使用Gson解析json案例具体解释的相关文章

Android 使用Gson解析json案例详解

一.目前解析json有三种工具:org.json(Java常用的解析),fastjson(阿里巴巴工程师开发的),Gson(Google官网出的),解析速度最快的是Gson,下载地址:https://code.google.com/p/google-gson/ 二.什么是JSON: JSON即JavaScript Object Natation, 它是一种轻量级的数据交换格式, 与XML一样, 是广泛被采用的客户端和服务端交互的解决方案. 三.JSON对象: JSON中对象(Object)以"{

android之GSON解析JSON

Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库. 比如: <pre name="code" class="java">public class Order { public String id; public String OrderName; @Override public String toString() { return "id:"+id+",OrderNa

Android用Gson解析JSON字符串

在volley框架中有一个 protected Response<Result<T>> parseNetworkResponse(NetworkResponse response){}函数.从服务器上或者在缓存中获取的JSON字符串在这个函数进行解析. String jsonString = new String(response.data, HttpHeaderParser.parseCharset(response.headers, HTTP.UTF_8)) Result<

Android中使用Gson解析JSON数据的两种方法

Json是一种类似于XML的通用数据交换格式,具有比XML更高的传输效率;本文将介绍两种方法解析JSON数据,需要的朋友可以参考下 Json是一种类似于XML的通用数据交换格式,具有比XML更高的传输效率. 从结构上看,所有的数据(data)最终都可以分解成三种类型: 第一种类型是标量(scalar),也就是一个单独的字符串(string)或数字(numbers),比如"北京"这个单独的词. 第二种类型是序列(sequence),也就是若干个相关的数据按照一定顺序并列在一起,又叫做数组

Android中利用Gson解析Json

在Android开发中,Json是一种客户端与服务器端交互的一种语言,它语法简单,最好的是目前市面上有很便捷的轮子可以对他进行解析.例如,Gson就是google提供的一款用于解析或者生成Json的库,可以直接将Json字符串映射成对应的实体类,十分方便.下面我总结一下利用Gson解析Json的用法以及我遇到的问题. 最简单对象的解析: 例如下边这段Json字符串: { text: "Love", img:"http://img2.imgtn.bdimg.com/it/u=2

Android网络之数据解析----使用Google Gson解析Json数据

[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4063452.html 联系方式:[email protected] [正文] 文章回顾: Android网络之数据解析----SAX方式解析XML数据 一.Json数据的介绍                                                             

我的Android进阶之旅------&gt;解决Jackson、Gson解析Json数据时,Json数据中的Key为Java关键字时解析为null的问题

1.问题描述 首先,需要解析的Json数据类似于下面的格式: { ret: 0, msg: "normal return.", news: [ { id: "NEW2016062800875700", from: "腾讯新闻客户端", qqnews_download_url: "http://inews.qq.com/m?refer=openapi_for_xiaotiancai", articletype: "1&

【Android进阶】Gson解析json字符串的简单应用

在客户端与服务器之间进行数据传输,一般采用两种数据格式,一种是xml,一种是json.这两种数据交换形式各有千秋,比如使用json数据格式,数据量会比较小,传输速度快,放便解析,而采用xml数据格式,如果使用SAX解析方式,则可以一边加载一边解析,对于数据量比较大的应用,比较适合.今天主要整理一下使用Gson解析json格式字符串的简单使用. 首先,必须导入外部包 /** * * @author ZhaoKaiQiang * * @time 2014年5月4日 */ public class J

android 使用gson 处理Json

Json是一种类似于XML的通用数据交换格式,比XML传输效率高.更利于网络传输数据.这里说一些使用Gosn类来处理json数据.Gson比传统的json处理方式更加快速,Gson开源的.如果有兴趣的也可以了解一下阿里开发的fastgson,速度也非常快. 使用Gosn 处理json非常简单.第一我们首先创建一个JavaBean类 (1)创建User.java public class User { public User(String name, int age) { this.name =