我试图解析多个对象, 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();
}
}
我没有得到解决方案,需要解决方案谢谢
答案 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(){}
方法中添加此内容或将其命名为任何内容。
我没有尝试做你想做的事情。但是使用凌空库似乎可行。