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());

这里一定要解析对应明白要不一直报错,我感觉之前没错,可总是错。

发布了71 篇原创文章 · 获赞 19 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_39131246/article/details/92795036
今日推荐