javascript代码实例教程-Android开发之Gson解析Json嵌套数据

发布时间:2019-01-25 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了javascript代码实例教程-Android开发之Gson解析Json嵌套数据脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
小宝典致力于为广大程序猿(媛)提供高品质的代码服务,请大家多多光顾小站,小宝典在此谢过。

Gson解析复杂的json数据

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

[java] 
  1. 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] 
    1. public class JsonBean {
    2. public String a;
    3. public List b;
    4. public C c;
    5.  
    6. public static class B {
    7.  
    8. public String b1;
    9.  
    10. public String b2;
    11. }
    12.  
    13. public static class C {
    14. public String c1;
    15. public String c2;
    16. }
    17. }


      很多时候大家都是不知道这个Bean是该怎么定义,这里面需要注意几点:
      1、内部嵌套的类必须是static的,要不然解析会出错;
      2、类里面的属性名必须跟Json字段里面的Key是一模一样的;
      3、内部嵌套的用[]括起来的部分是一个List,所以定义为 public List b,而只用{}嵌套的就定义为 public C c,
      具体的大家对照Json字符串看看就明白了,不明白的我们可以互相交流,本人也是开发新手

      [java] view plaincopy
      1. Gson gson = new Gson();
      2. java.lang.reflect.TyPE type = new TypeToken() {}.getType();
      3. JsonBean jsonBean = gson.FromJson(json, type);

        然后想拿数据就很简单啦,直接在jsonBean里面取就可以了!
        如果需要解析的Json嵌套了很多层,同样可以可以定义一个嵌套很多层内部类的Bean,需要细心的对照Json字段来定义哦。

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

        {
        error: 0,
        status: success,
        date: 2014-05-10,
        results: [
        {
        currentCITy: 南京,
        weather_data: [
        {
        date: 周六(今天, 实时:19℃),
        dayPictureUrl: https://api.map.baidu.COM/images/weather/day/dayu.png,
        nightPictureUrl: https://api.map.baidu.com/images/weather/night/dayu.png,
        weather: 大雨,
        wind: 东南风5-6级,
        temperature: 18℃
        },
        {
        date: 周日,
        dayPictureUrl: https://api.map.baidu.com/images/weather/day/zhenyu.png,
        nightPictureUrl: https://api.map.baidu.com/images/weather/night/duoyun.png,
        weather: 阵雨转多,
        wind: 西北风4-5级,
        temperature: 21 ~ 14℃
        }
        ]
        }
        ]
        }
        2.必须定义如下一些的javaBean数据
        Status.java
        [java] view plaincopy
        1. public class Status
        2. {
        3. PRivate String error;
        4. private String status;
        5. private String date;
        6. private List results;
        7. public String getError()
        8. {
        9. return error;
        10. }
        11. public void setError(String error)
        12. {
        13. this.error = error;
        14. }
        15.  
        16. public String getStatus()
        17. {
        18. return status;
        19. }
        20. public void setStatus(String status)
        21. {
        22. this.status = status;
        23. }
        24. public String getDate()
        25. {
        26. return date;
        27. }
        28. public void setDate(String date)
        29. {
        30. this.date = date;
        31. }
        32. public List getResults()
        33. {
        34. return results;
        35. }
        36. public void setResults(List results)
        37. {
        38. this.results = results;
        39. }
        40. @override
        41. public String toString()
        42. {
        43. return Status [error= + error + , status= + status
        44. + , date= + date + , results= + results + ];
        45. } Results.java
          [java] view plaincopy
          1. public class Results
          2. {
          3. private String currentCity;
          4. private List weather_data;
          5. public String getCurrentCity()
          6. {
          7. return currentCity;
          8. }
          9. public void setCurrentCity(String currentCity)
          10. {
          11. this.currentCity = currentCity;
          12. }
          13. public List getWeather_data()
          14. {
          15. return weather_data;
          16. }
          17. public void setWeather_data(List weather_data)
          18. {
          19. this.weather_data = weather_data;
          20. }
          21. @Override
          22. public String toString()
          23. {
          24. return Results [currentCity= + currentCity + , weather_data=
          25. + weather_data + ];
          26. }
            Weather.java
            [java] view plaincopy
            1. public class Weather {
            2. private String date;
            3. private String dayPictureUrl;
            4. private String nightPictureUrl;
            5. private String weather;
            6. private String wind;
            7. private String temperature;
            8. public String getDate() {
            9. return date;
            10. }
            11. public void setDate(String date) {
            12. this.date = date;
            13. }
            14. public String getDayPictureUrl() {
            15. return dayPictureUrl;
            16. }
            17. public void setDayPictureUrl(String dayPictureUrl) {
            18. this.dayPictureUrl = dayPictureUrl;
            19. }
            20. public String getNightPictureUrl() {
            21. return nightPictureUrl;
            22. }
            23. public void setNightPictureUrl(String nightPictureUrl) {
            24. this.nightPictureUrl = nightPictureUrl;
            25. }
            26. public String getWeather() {
            27. return weather;
            28. }
            29. public void setWeather(String weather) {
            30. this.weather = weather;
            31. }
            32. public String getWind() {
            33. return wind;
            34. }
            35. public void setWind(String wind) {
            36. this.wind = wind;
            37. }
            38. public String getTemperature() {
            39. return temperature;
            40. }
            41. public void setTemperature(String temperature) {
            42. this.temperature = temperature;
            43. }
            44. @Override
            45. public String toString() {
            46. return Weather [date= + date + , dayPictureUrl=
            47. + dayPictureUrl + , nightPictureUrl=
            48. + nightPictureUrl + , weather= + weather
            49. + , wind= + wind + , temperature= + temperature
            50. + ];
            51. }
            52. 然后具体的javabean定义好了就将解析数据了,下面就是我的解析数据类
              [java] view plaincopy
              1. public class MainActivity extends Activity
              2. {
              3. private Button tojson;
              4. RequestQueue mQueue;
              5. StringRequest stringRequest;
              6. Gson gson;
              7. String str;
              8.  
              9. @Override
              10. protected void onCreate(Bundle savedInstanceState)
              11. {
              12. super.onCreate(savedInstanceState);
              13. setContentView(R.layout.activity_main);
              14.  
              15. tojson = (Button)findViewById(R.id.tojson);
              16. gson = new Gson();
              17.  
              18. mQueue = Volley.newRequestQueue(MainActivity.this);
              19. //https://10.19.20.12/upgrade/test.txt是测试使用的json数据
              20. stringRequest = new StringRequest(https://10.19.20.12/upgrade/test.txt,
              21. new Response.Listener()
              22. {
              23. @Override
              24. public void onResponse(String response)
              25. {
              26. LOG.d(TAG, response);
              27. System.out.println(response=+response);
              28. Status status = gson.fromJson(response, Status.class);
              29. System.out.println(status=+status);
              30. System.out.println(-------------------------------------);
              31. List result = status.getResults();
              32. System.out.println(result=+result);
              33.  
              34. }
              35. },
              36. new Response.ErrorListener()
              37. {
              38. @Override
              39. public void onErrorResponse(VolleyError error)
              40. {
              41. Log.e(TAG, error.getMessage(), error);
              42. }
              43.  
              44. });
              45.  
              46. tojson.setOnClickListener(new OnClickListener()
              47. {
              48. @Override
              49. public void onClick(View v)
              50. {
              51. mQueue.add(stringRequest);
              52. }
              53. });
              54. }
              55.  
              56.  
              57.  
              58. }
              59. 其中上面的RequestQueue是开网络库Volley的使用,如果你对该库的使用还不熟悉的话可以参考https://blog.csdn.net/guolin_blog/article/details/17482095,该作者对Volley库的使用讲解得非常的细致和深入
                大家可以仔细的去拜读。 转载: https://blog.csdn.net/tkwxty/article/details/34474501

觉得可用,就经常来吧! 脚本宝典 欢迎评论哦! js脚本,巧夺天工,精雕玉琢。小宝典献丑了!

脚本宝典总结

以上是脚本宝典为你收集整理的javascript代码实例教程-Android开发之Gson解析Json嵌套数据全部内容,希望文章能够帮你解决javascript代码实例教程-Android开发之Gson解析Json嵌套数据所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。