• android中用Gson解析json全解析


    Gson解析复杂的json数据

      最近在给公司做一个直播APK的项目,主要就是通过解析网络服务器上的json数据,然后将频道地址下载下来再调用Android的播放器进行播放,原先本来打算使用普通的json解析方法即JsonObject和JsonArray的配合使用,这对于解析小数据的json数据还是比较实用,但是当解析json数据比较复杂的时候这种方法就显得比较吃力也比较麻烦了,如果大家感兴趣的话网上有大量的实例可以到网上去看看。

             在这里我将介绍解析json数据的另外一种方法就是通过Gson解析,对于解析比较简单的json数据我就不介绍了来一个比较复杂一点的json数据,如下面我们要解析的一个json数据:

    [java] view plaincopy

    String json ={"a":"100","b":[{"b1":"b_value1","b2":"b_value2"},{"b1":"b_value1","b2":"b_value2"}],"c":{"c1":"c_value1","c2":"c_value2"}} 

    如果使用JsonObject和JsonArray的配合起来使用也是可以解析的但是解析起来就比较麻烦了,如果使用Gson解析就比较简单了,首先我们需要定义一个序列化的Bean,这里采用内部类的形式,这样比较容易看得清晰些

    首先我们需要定义一个序列化的Bean,这里采用内部类的形式,看起来会比较清晰一些:

                  

    [java] view plaincopy

    public class JsonBean { 

                             public String a; 

                            publicList<B> b; 

                             public C c; 

     

                             public static class B{ 

     

                                          publicString b1; 

     

                                      public Stringb2; 

                           } 

         

                            public static class C{ 

                                     public Stringc1; 

                                     public Stringc2; 

                           } 

                  } 

                很多时候大家都是不知道这个Bean是该怎么定义,这里面需要注意几点:

                1、内部嵌套的类必须是static的,要不然解析会出错;

                2、类里面的属性名必须跟Json字段里面的Key是一模一样的;

                3、内部嵌套的用[]括起来的部分是一个List,所以定义为 public List<B> b,而只用{}嵌套的就定义为public C c,

                      具体的大家对照Json字符串看看就明白了,不明白的我们可以互相交流,本人也是开发新手!

    [java] view plaincopy

    Gson gson = new Gson(); 

    java.lang.reflect.Type type = newTypeToken<JsonBean>() {}.getType(); 

    JsonBean jsonBean = gson.fromJson(json,type);</span> 

          然后想拿数据就很简单啦,直接在jsonBean里面取就可以了!

          如果需要解析的Json嵌套了很多层,同样可以可以定义一个嵌套很多层内部类的Bean,需要细心的对照Json字段来定义哦。

          下面我将以一个具体的列子来说明通过Gson方式解析复杂的json数据

    1.将要解析的数据如下面的格式

    {

       "error": 0,

       "status": "success",

       "date": "2014-05-10",

       "results": [

           {

               "currentCity": "南京",

               "weather_data": [

                    {

                        "date": "周六(今天, 实时:19℃)",

                        "dayPictureUrl":"http://api.map.baidu.com/images/weather/day/dayu.png",

                       "nightPictureUrl":"http://api.map.baidu.com/images/weather/night/dayu.png",

                        "weather": "大雨",

                        "wind": "东南风5-6级",

                        "temperature":"18℃"

                    },

                    {

                        "date": "周日",

                        "dayPictureUrl":"http://api.map.baidu.com/images/weather/day/zhenyu.png",

                       "nightPictureUrl":"http://api.map.baidu.com/images/weather/night/duoyun.png",

                        "weather": "阵雨转多云",

                        "wind": "西北风4-5级",

                        "temperature":"21 ~ 14℃"

                    }

               ]

           }

        ]

    }

    2.必须定义如下一些的javaBean数据

    Status.java

    [java] view plaincopy

    public class Status  

           private String error; 

           private String status; 

           private String date; 

           private List<Results> results; 

           public String getError()  

           { 

               return error; 

           } 

           public void setError(String error)  

           { 

               this.error = error; 

           } 

             

           public String getStatus()  

           { 

               return status; 

           } 

           public void setStatus(String status)  

           { 

               this.status = status; 

           } 

           public String getDate()  

           { 

               return date; 

           } 

           public void setDate(String date)  

           { 

               this.date = date; 

           } 

           public List<Results> getResults()  

           { 

               return results; 

           } 

           public void setResults(List<Results> results)  

           { 

               this.results = results; 

           } 

           @Override 

           public String toString()  

           { 

               return "Status [error=" + error + ", status=" +status 

                        + ", date=" +date + ", results=" + results + "]"; 

           } 

    </span> 

    Results.java

    [java] view plaincopy

    public class Results  

    {    

       private String currentCity; 

       private List<Weather> weather_data; 

       public String getCurrentCity()  

       { 

           return currentCity; 

       } 

       public void setCurrentCity(String currentCity)  

       { 

           this.currentCity = currentCity; 

       } 

       public List<Weather> getWeather_data()  

       { 

           return weather_data; 

       } 

       public void setWeather_data(List<Weather> weather_data)  

       { 

           this.weather_data = weather_data; 

       } 

       @Override 

       public String toString()  

       { 

           return "Results [currentCity=" + currentCity + ",weather_data=" 

                    + weather_data +"]"; 

       } 

    Weather.java

    [java] view plaincopy

    public class Weather { 

       private String date; 

                    private StringdayPictureUrl; 

                    private StringnightPictureUrl; 

                    private String weather; 

                    private String wind; 

                    private Stringtemperature; 

                    public String getDate() { 

                        return date; 

                    } 

                    public void setDate(Stringdate) { 

                        this.date = date;  

                    } 

                    public StringgetDayPictureUrl() { 

                        return dayPictureUrl; 

                    } 

                    public voidsetDayPictureUrl(String dayPictureUrl) { 

                        this.dayPictureUrl = dayPictureUrl; 

                    } 

                    public StringgetNightPictureUrl() { 

                        returnnightPictureUrl; 

                    } 

                    public voidsetNightPictureUrl(String nightPictureUrl) { 

                        this.nightPictureUrl =nightPictureUrl; 

                    } 

                    public String getWeather(){ 

                        return weather; 

                    } 

                    public void setWeather(Stringweather) { 

                        this.weather =weather; 

                    } 

                    public String getWind() { 

                        return wind; 

                    } 

                    public void setWind(Stringwind) { 

                        this.wind = wind; 

                    } 

                   public StringgetTemperature() { 

                        return temperature; 

                    } 

                    public voidsetTemperature(String temperature) { 

                        this.temperature =temperature; 

                    } 

                   @Override 

                    public String toString() { 

                        return "Weather[date=" + date + ", dayPictureUrl=" 

                                + dayPictureUrl +", nightPictureUrl=" 

                                + nightPictureUrl +", weather=" + weather 

                                + ",wind=" + wind + ", temperature=" + temperature 

                                +"]"; 

                    }  

                   

    然后具体的javabean定义好了就将解析数据了,下面就是我的解析数据类

    [java] view plaincopy

    public class MainActivity extendsActivity  

       private Button tojson;   

       RequestQueue mQueue;     

       StringRequest stringRequest;     

       Gson gson; 

       String str; 

     

       @Override 

       protected void onCreate(Bundle savedInstanceState)  

        { 

           super.onCreate(savedInstanceState); 

           setContentView(R.layout.activity_main); 

             

           tojson = (Button)findViewById(R.id.tojson); 

           gson = new Gson(); 

     

       mQueue = Volley.newRequestQueue(MainActivity.this);  

             //http://10.19.20.12/upgrade/test.txt是测试使用的json数据 

           stringRequest = newStringRequest("http://10.19.20.12/upgrade/test.txt", 

                    newResponse.Listener<String>()  

                    { 

                        @Override 

                        public voidonResponse(String response)  

                        { 

                            Log.d("TAG",response); 

                           System.out.println("response="+response); 

                            Status status =gson.fromJson(response, Status.class); 

                           System.out.println("status="+status); 

                           System.out.println("-------------------------------------"); 

                            List<Results>result = status.getResults(); 

                            System.out.println("result="+result); 

                             

                        } 

                    },  

                    newResponse.ErrorListener()  

                    { 

                        @Override 

                        public voidonErrorResponse(VolleyError error)  

                        { 

                            Log.e("TAG",error.getMessage(), error); 

                        } 

     

                    }); 

       

           tojson.setOnClickListener(new OnClickListener()  

           {        

               @Override 

               public void onClick(View v)  

               { 

                    mQueue.add(stringRequest); 

               } 

           });      

       } 

     

         

      

    }  

  • 相关阅读:
    Java中的多线程你只要看这一篇就够了
    用Spring Boot颠覆Java应用开发
    Java Web 学习路线
    Java基本概念(2)J2EE里面的2是什么意思
    Java基本概念(1)什么是Java
    《Effective Java》读书笔记一(创建与销毁对象)
    Java:集合,对列表(List)中的数据(整型、字符串、日期等)进行排序(正序、倒序)的方法;字符串按照整型排序的方法
    Java:几个正则式应用(检查汉字、日期、EMAIL、手机号码的合法性,替换字符串等)
    Solr4:查询参数fq的用法(对结果进行过滤;两组关键词组合查询)
    Oracle删除重复记录只保留一条数据的几种方法
  • 原文地址:https://www.cnblogs.com/dandre/p/4507019.html
Copyright © 2020-2023  润新知