Android json解析不起作用

时间:2017-02-10 05:50:30

标签: android json

Android json解析无效。我的json字符串是

    [
      {"app":
        {"id":3,"image_title":"Fashion"}
        },
      {"app2":
        [
          {"id":3,"image_title":"Fashion"},
          {"id":3,"image_title":"Fashion"},
          {"id":3,"image_title":"Fashion"}
        ]
      }
    ]

但是当我使用这段代码时

JSONObject jsonObj = new JSONObject(jsonStr);
JSONArray app = jsonObj.getJSONArray("app");
    for (int i = 0; i < app.length(); i++) {
        JSONObject c = app.getJSONObject(i);
        String id = c.getString("id");
        String title = c.getString("image_title");
        Log.d("LOG", "id :"+id+" title :"+title);
        JSONObject app2 = jsonObj.getJSONObject("app2");
        for (int j = 0; j < app2.length(); j++) {
            String id1 = app2.getString("id");
            String title1 = app2.getString("image_title");
            Log.d("LOG", "id1 :"+id1+" title1 :"+title1);
        }

    }

没有获得输出。 jsonStr是我在上面给出的json字符串。 我想打印对象ID和标题。怎么可能?请帮帮我?

4 个答案:

答案 0 :(得分:1)

您的JSON是JSONArray,其中包含两个JSONObjects。您需要做的是解析数组,检索JSONObject via索引,然后解析这些对象。

JSONArray jArray = new JSONArray(jsonStr);
JSONObject firstObj = jArray.getJSONObject(0);
JSONObject app1 = firstObj.getJSONObject("app");

//Parse your app1 here

JSONObject secObj = jArray.getJSONObject(1);
JSONObject app2 = secObj.getJSONArray("app2");

//Parse your app2 here

请记住,您的第一个对象即app1JSONObject。所以你可以使用app1.getString("image_title");解析它。此外,您的第二个对象app2JSONArray,因此您必须使用索引从中检索JSONObject,然后解析JSONObjects

for(int i = 0 ; i < app2.length() ; i++) {
    JSONObject tmp = app2.getJSONObject(i);
    // Parse the object
}

答案 1 :(得分:0)

你的JSON很奇怪。据我所知,它没有任何结构。解析不起作用,因为第一个appJSONObject

"app":
        {"id":3,"image_title":"Fashion"}
        }

,但第二个是JSONArray

"app2":
        [
          {"id":3,"image_title":"Fashion"},
          {"id":3,"image_title":"Fashion"},
          {"id":3,"image_title":"Fashion"}
        ]

您可以执行类似

的操作
JSONObject dataObject = json.optJSONObject("app");

if (dataObject != null) {

    //Do things with object.

} else {

    JSONArray array = json.optJSONArray("app");

    //Do things with array
}

此外,您的根对象不是JSONObject,而是JSONArray

答案 2 :(得分:0)

使用Below方法解析您的回复:

private void parseJsonResponse(String jsonString) {
        try {
            Object object = new JSONTokener(jsonString).nextValue();
            if (object != null) {
                if (object instanceof JSONArray) {
                    JSONArray jsonArray = (JSONArray) object;
                    if (jsonArray != null && jsonArray.length() > 0) {
                        for (int i = 0; i < jsonArray.length(); i++) {
                            Object object1 = jsonArray.get(i);
                            if (object1 != null) {
                                if (object1 instanceof JSONObject) {
                                    JSONObject jsonObject = (JSONObject) object1;
                                    if (jsonObject != null) {
                                        if (jsonObject.has("app")) {
                                            Object object2 = jsonObject.get("app");
                                            if (object2 != null) {
                                                if (object2 instanceof JSONObject) {
                                                    JSONObject jsonObject3 = (JSONObject) object2;
                                                    String id = jsonObject3.optString("id");
                                                    Log.i(getClass().getSimpleName(),"id="+id);
                                                    String image_title = jsonObject3.optString("image_title");
                                                    Log.i(getClass().getSimpleName(),"image_title="+image_title);
                                                }
                                            }
                                        } else if (jsonObject.has("app2")) {
                                            Object object2 = jsonObject.get("app2");
                                            if (object2 != null) {
                                                if (object2 instanceof JSONArray) {
                                                    JSONArray jsonArray1 = (JSONArray) object2;
                                                    if (jsonArray1 != null && jsonArray1.length() > 0) {
                                                        for (int j = 0; j < jsonArray1.length(); j++) {
                                                            Object object3 = jsonArray1.get(i);
                                                            if (object3 != null) {
                                                                if (object3 instanceof JSONObject) {
                                                                    JSONObject jsonObject3 = (JSONObject) object3;
                                                                    if (jsonObject3 != null) {
                                                                        String id = jsonObject3.optString("id");
                                                                        Log.i(getClass().getSimpleName(),"id="+id);
                                                                        String image_title = jsonObject3.optString("image_title");
                                                                        Log.i(getClass().getSimpleName(),"image_title="+image_title);
                                                                    }
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }

    }

我使用JSONTokener来获取即将到来的对象是JSONArray OR JSONObject。

答案 3 :(得分:-1)

try {
        JSONArray jsonArray = new JSONArray(json);


            JSONObject jsonObjectApp = jsonArray.getJSONObject(0);
            JSONObject jsonObjectApp1 = jsonObjectApp.getJSONObject("app");
            String idApp = jsonObjectApp1.getString("id"); 
            String image_titleApp = jsonObjectApp1.getString("image_title");


        JSONObject jsonObjectApp2 = jsonArray.getJSONObject(1);
        JSONArray jsonArrayApp21 = jsonObjectApp2.getJSONArray("app2");
        for (int i = 0 ;i<jsonArrayApp21.length();i++) {
            JSONObject jsonObjectApp21 = jsonArrayApp21.getJSONObject(i);
            String id = jsonObjectApp21.getString("id");
            String image_title = jsonObjectApp21.getString("image_title");
        }

    } catch (JSONException e) {
        e.printStackTrace();
    }