JAVA FOR Android 关于JSON字符串的解析

来源:互联网 发布:js获取ios系统版本 编辑:程序博客网 时间:2024/05/16 08:48

以前都没有写博客的习惯,一直想写结果由于自己的懒惰一直没有写,自己尝试用HXOD搭了博客结果失败放弃了微笑,以后会经常通过博客来总结自己在工作学习中积累的知识点。最近期末实训在做一个天气预报的手机app,之前看着郭神的那本第一行代码跟着做了后面的项目,最后发现项目的接口有问题天气信息一直不更新,然后更换了百度SDK的接口在使用过程中发现服务器返回的JSON数据非常复杂,上网查了很多的资料比较多的是使用第三方JAR包来进行JSON数据的解析,最后我选用了GSON来进行JSON的数据解析,网上的很多文章都不详细导致走了很多的弯路,所以我准备写一篇比较详细的我能看得懂的文章来详细的讲一下使用GSON对JSON进行解析。
首先需要下载谷歌的一个GSON.jar包网上有很多的下载链接这里就不发链接了,这里我准备了一组复杂的多层嵌套的JSON数据来进行演示

{    data:"0",    data1:"1",    data2:"2",    big:{        big0:"b0",        big1:"b1",        big2:[{            c:"1",            c1:"2",            c2:"3"            },            {            c:"4",            c1:"5",            c2:"6"            },            {            c:"7",            c1:"8",            c2:"9"            }]        }}

这是一个嵌套了三层的JSON字符串下面,我将对每一层的代码解析进行说明。
首先我们需要建一个名叫Bean的实体类用来对解析的JSON进行取值和赋值

public  class  Bean {        private String data;        private String data1;        private Big big;        public String getdata(){            return data;        }        public void setdata(String data){            this.data=data;        }        public String getdata1(){            return data1;        }        public void setdata1(String data1){            this.data1=data1;        }        public Big getbig(){            return big;        }        public void setbig(Big big){            this.big=big;        }}

这个类的作用主要是对第一层是数据进行取值和赋值声明了第一层JSON数据里的字段并写了各个字段的get、set方法用来进行取值赋值,注意第一层里的big字段是一个多层嵌套的字段并且首尾为{},所以在声明字段类型的时候需要声明为类类型的数据get、set方法中传入的参数和返回值类型也都为类类型。第一个实体类中我们将第三个字段的类型声明为Big类型所以我们这里写第二个实体类类名应该和第一个实体类中所对应字段声明的类型一致。

public  class  Big {        private String big0;        private String big1;        private List<Big2> big2;        public String getbig0(){            return big0;        }        public void setbig0(String big0){            this.big0=big0;        }        public String getbig1(){            return big1;        }        public void setbig1(String big1){            this.big1=big1;        }        public List<Big2> getbig2(){            return big2;        }        public void setbig2(List<Big2> big2){            this.big2=big2;        }}

第二个实体类主要是用来对第二层嵌套进行取值和赋值操作,在这个类中首先声明了这个类中的字段,因为big2是一个JSON数组首尾以[ ]包裹所以将变量声明为list类型并且指定list中的数据类型,该类型的名称为第三个实体类的类名主要对这个JSON数组进行取值操作,接下来再分别写出各个字段的get、set方法。

public class Big2 {    private String c;    private String c1;    private String c2;    public String getc(){        return c;    }    public void setc(String c){        this.c=c;    }    public String getc1(){        return c1;    }    public void setc1(String c1){        this.c1=c1;    }    public String getc2(){        return c2;    }    public void setc2(String c2){        this.c2=c2;    }}

第三个实体类主要是对JSON数组进行取值操作分别定义变量和编写get、set方法。
好了编写完实体类之后剩下的就简单了只要取值就可以了
首先我们将我们下好的jar包导入直接复制到libs文件夹就可以了
接着我们实例化一个gson对象并准备好一组JSON数据由于第三层数据较长所以删除了两组数据,注意双引号需要进行转义。

String response="{data:\"0\",data1:\"1\",data2:\"2\",big:{big0:\"b0\",big1:\"b1\",big2:[{c:\"1\",c1:\"2\",c2:\"3\"}]}}";Gson gson=new Gson();

在实例化一个bean对象调用gson的fromJson();方法传入相应的参数,第一个参数为需要解析的json数据第二组参数为对应的解析类。

Bean bean=gson.fromJson(response,Bean.class);

下面就可以去数据了,我们先来取第三层的一个字段c。

String c=bean.getbig().getbig2.get(0).getc();

首先通过实例化的对象bean.getbig();获取了big对象然后再调用了big对象的getbig2的方法获取了第三层数据的list集合,然后.get(0)取得第一组数据再调用getc()方法取出第三层第一组数据中的c的值,到这里我们的JSON数据解析就大功告成了。

0 0
原创粉丝点击