如何解析Json对象和对象

时间:2017-08-03 13:12:02

标签: java android json gson

我试图解析多个对象, Bellow我正在接收Json示例

 {
    "0": //outer objects are multiples, i just post one object for sample
    {
        "id": "1",      
        "name": "B2 MR1",
        "description": 
        {
            "0": //it is also multiple objects m just showing one
            {

                "title": "Carve the Future",
                "description": "Welcome to Meeting Room 1",
                "push_notification": "Carve the Future",

            }
        }
    },//after that the next obj will be show
  .
  .
}

在第二个对象 1 中,我也有上面的键和值,我不能说它,这是我的模型。

 public class JsonModel {   

      private String id;    //getter setter
      private String name;  //getter setter
     List<InnerDescprtion> description;  //getter setter
    }

这是我的 InnerDescprtion 模型

 private class InnerDescprtion {
       private String id; //getter setter
       private String title;  //getter setter
     }

下面是我的 java代码,用于使用 Gson 解析它,

   JsonModel outterModelClass= null;
                    List<JsonModel> listObj = new ArrayList<>();
                    for (int i = 0; i < responseJson.length(); i++) {

                        try {
                            outterModelClass= new Gson().fromJson(responseJson.getString(String.valueOf(i)), JsonModel.class);
                            listObj.add(outterModelClass); //here i'm getting exception,,
                        } catch (JSONException e) {
                            e.printStackTrace();
                             }
                    }

我没有得到解决方案,需要解决方案谢谢

3 个答案:

答案 0 :(得分:0)

如果有可能,我会将json更改为:

 [{
        "id": "1",
        "name": "B2 MR1",
        "description": [{
            "id" : "1-1",
            "title": "Carve the Future",
            "description": "Welcome to Meeting Room 1",
            "push_notification": "Carve the Future"
        }]
    },
    {
        "id": "2",
        "name": "B2 MR2",
        "description": [{
            "id" : "2-1",
            "title": "Carve the Future 2",
            "description": "Welcome to Meeting Room 2",
            "push_notification": "Carve the Future 2"
        }]
    }
 ]

然后你的方法应该只做一些改变:

BufferedReader br = new BufferedReader(new FileReader("c:/test/test.json"));
Type listType = new TypeToken<ArrayList<JsonModel>>(){}.getType();

List<JsonModel> outterModels = new Gson().fromJson(br, listType);

如果您无法更改json,我建议您使用另一个JSON库,如json simple并手动提取所有内容。

答案 1 :(得分:0)

你的'listObj'应该这样定义:

ArrayList<JsonModel> listObj = new ArrayList<JsonModel>();

答案 2 :(得分:0)

那是一个令人讨厌的JSON。不过我建议你使用volley android库。我有一个类似问题的任务。只有另一个对象内部有一个对象。要在项目中包含排球,请在build.gradle内使用app更新compile 'com.android.volley:volley:1.0.0' dependencies{}模块。 baseUrl是您从中获取JSON的网址。

然后你可以做类似的事情:

JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.GET,
            baseUrl,
            null,
            new Response.Listener<JSONObject>() {

                @Override
                public void onResponse(JSONObject response) {

                    try {
                        // Parsing json object response
                        // response will be a json object
                        for (int i=0; i<response.length(); i++){
                            JSONObject obj = response.getJSONObject(i);

                            //id
                            //name
                            try{
                                for (int j=0; j<obj.length() ; j++) {
                                JSONObject description = obj.getJSONObject(j);
                                //title
                                //description
                                //push notification

                                }
                            } catch (JSONException e) {
                                 e.printStackTrace();
                                Toast.makeText(getApplicationContext(),
                                "Error: " + e.getMessage(),
                                Toast.LENGTH_LONG).show();
                            }


                        }

                    } catch (JSONException e) {
                        e.printStackTrace();
                        Toast.makeText(getApplicationContext(),
                                "Error: " + e.getMessage(),
                                Toast.LENGTH_LONG).show();
                    }

                    hidepDialog();

                }

            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError volleyError) {
            VolleyLog.d(TAG,"Error: "+ volleyError.getMessage() );
            Toast.makeText(getApplicationContext(), volleyError.getMessage(), Toast.LENGTH_SHORT).show();
            hidepDialog();
        }
    });
    //adding request to request queue
    AppController.getmInstance().addToRequestQueue(jsonObjReq);

parseJSON(){}方法中添加此内容或将其命名为任何内容。

我没有尝试做你想做的事情。但是使用凌空库似乎可行。