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和标题。怎么可能?请帮帮我?
答案 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
请记住,您的第一个对象即app1
是JSONObject
。所以你可以使用app1.getString("image_title");
解析它。此外,您的第二个对象app2
是JSONArray
,因此您必须使用索引从中检索JSONObject
,然后解析JSONObjects
for(int i = 0 ; i < app2.length() ; i++) {
JSONObject tmp = app2.getJSONObject(i);
// Parse the object
}
答案 1 :(得分:0)
你的JSON很奇怪。据我所知,它没有任何结构。解析不起作用,因为第一个app
是JSONObject
:
"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();
}