JSON 解析之 GSON 解析Java 對象的 List(多層json)

前言:看了好多gson解析多層json的博客都不盡如人意,都在jsonbean這就結束了,我想要後面將json轉換成對象的部分啊

於是自己動手豐衣足食,我終於讓我在龐大的雲盤庫裏找到了,開心。但是我還是不熟悉多層,我多解析結果數據。

一組接口json的數據:

1.定義一個bean:

Androidstudio 有插件GsonFormat,下載後重啓。

實現方式:新建一個java類,右鍵“Generate...”,選擇“GsonFormat”,將json數據複製到輸入框,點擊“OK”,即可生成一個bean,如下所示:

package com.example.informationdome;

import java.util.List;

class AppBean {

    private List<GrandsonCategoryBean> grandsonCategory;

    public List<GrandsonCategoryBean> getGrandsonCategory() {
        return grandsonCategory;
    }

    public void setGrandsonCategory(List<GrandsonCategoryBean> grandsonCategory) {
        this.grandsonCategory = grandsonCategory;
    }

    public static class GrandsonCategoryBean {
        /**
         * id : 2248
         * name : 洗髮護髮
         * link :
         */

        private String id;
        private String name;
        private String link;

        public String getId() {
            return id;
        }

        public void setId(String id) {
            this.id = id;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getLink() {
            return link;
        }

        public void setLink(String link) {
            this.link = link;
        }
    }
}

太不容易了,解析多層json 。只限於該json,不過反應過來了。

public class MainActivity extends AppCompatActivity {
    private static final String TAG = "log";
    TextView responseText;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        responseText = (TextView) findViewById(R.id.response_text);

        new Thread(new Runnable() {
            @Override
            public void run() {
                HttpURLConnection connection = null;
                BufferedReader reader = null;
                try {
                    OkHttpClient client = new OkHttpClient();
                    // post請求
                    RequestBody requestBody = new FormBody.Builder()
                            .add("type","1")
                            .build();


                    Request request = new Request.Builder()
                            .url(" 你的api url")
                            .post(requestBody)
                            .build();


                    Response response = client.newCall(request).execute();
                    String responseData = response.body().string();

                    //根據格式通過JSONObject和JSONArray進行轉換
                    JSONObject jsonObject = new JSONObject(responseData);
                    JSONArray jsonArray = jsonObject.getJSONArray("grandsonCategory");
                   // showResponse(jsonArray.toString());

                    Gson gson=new Gson();
                    List<JsonBean.GrandsonCategoryBean> grandsonCategoryBeans=gson.fromJson(jsonArray.toString(),new TypeToken<List<JsonBean.GrandsonCategoryBean>>(){}.getType());

                    for (int i=0;i<grandsonCategoryBeans.size();i++){
                        Log.i(TAG,grandsonCategoryBeans.get(i).getId());
                        Log.i(TAG,grandsonCategoryBeans.get(i).getName());
                        Log.i(TAG,grandsonCategoryBeans.get(i).getLink());
                    }


                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    if (reader != null) {
                        try {
                            reader.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }

                    if (connection != null) {
                        connection.disconnect();
                    }
                }
            }
        }).start();

        
}

}

將 json 格式的字符串[]轉換爲 Java 對象的 List 

1)用到的 API T fromJson(String json, Type typeOfT);//將 json 數組轉換爲 Java 對象的 list 注意:要求 json 對象中的 key 的名稱與 java 對象對應的類中的屬性名要相同 
 
2)使用步驟  

(1)將 Gson 的 jar 包導入到項目中

(2)創建Gson對象  : Gson gson = new Gson();

(3)通過創建的Gson對象調用fromJson()方法,返回該JSON數據對應的Java集合:

List<JsonBean.GrandsonCategoryBean> grandsonCategoryBeans=gson.fromJson(jsonArray.toString(),new TypeToken<List<JsonBean.GrandsonCategoryBean>>(){}.getType());

這裏一定要解析對應明白要不一直報錯,我感覺之前沒錯,可總是錯。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章