Android開發之Gson解析Json嵌套資料

來源:互聯網
上載者:User

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: 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
        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. //http://10.19.20.12/upgrade/test.txt是測試使用的json資料
              20. stringRequest = new StringRequest(http://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的使用,如果你對該庫的使用還不熟悉的話可以參考http://blog.csdn.net/guolin_blog/article/details/17482095,該作者對Volley庫的使用講解得非常的細緻和深入
                大家可以仔細的去拜讀。 轉載: http://blog.csdn.net/tkwxty/article/details/34474501

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.