我试图从JSONData中显示JsonArray值
JSON DATA
{"错误":{" group_name":["群组名称已被采用。"]}}
这是我的代码
httppost.setEntity(new UrlEncodedFormEntity(params));
HttpResponse response = httpclient.execute(httppost);
String responseStr = EntityUtils.toString(response.getEntity());
JSONObject json = new JSONObject(responseStr);
Log.d("Checking Login", responseStr);
JSONArray jsonArray = json.getJSONArray("group_name");
for(int i = 0; i<jsonArray.length();i++){
JSONObject jsonObject = jsonArray.getJSONObject(i);
}
我得到的例外情况如此 org.json.JSONException:group_name没有值
答案 0 :(得分:4)
error
嵌套JSONObject
,其中包含JSONArray
JSONObject json = new JSONObject(responseStr);
JSONObject json1 = json.getJSONObject("error");
// ^^^^^ fetch nested JSON
JSONArray jsonArray = json1.getJSONArray("group_name");
for(int i = 0; i<jsonArray.length();i++){
// JSONObject jsonObject = jsonArray.getJSONObject(i); error
// jsonArray has no JSONOBJECT but it has String
}
注意:您的group_name
JSONArray没有jsonObjects
,而是根据您展示的示例只有一个String
,因此jsonArray.getJSONObject(i)
会导致异常。
{"error":{"group_name":["The group name has already been taken."]}}
|---------------String-----------------|
|---------------JSONOArray---------------|
|-----------------Nested JSONOBJECT---------------------|
|------------------------JSONOBJECT-------------------------------|
所以你String
只有JSONArray
所以请使用optString
来抓取String
JSONObject json = new JSONObject(responseStr);
JSONObject json1 = json.getJSONObject("error");
// ^^^^^ fetch nested JSON
JSONArray jsonArray = json1.getJSONArray("group_name");
for(int i = 0; i<jsonArray.length();i++){
String str = jsonArray.optString(i);
}
答案 1 :(得分:1)
“错误”将解析如下:
JSONObject json = new JSONObject(responseStr);
JSONObject jsonError = json.getJSONObject("error");
JSONArray jsonArray = jsonError.getJSONArray("group_name");
for(int i = 0; i<jsonArray.length();i++){
JSONObject jsonObject = jsonArray.getJSONObject(i);
}
答案 2 :(得分:0)
你可以通过这种方式获得字符串
for(int i = 0; i<jsonArray.length();i++){
String groupName = jsonArray.optString(i);
}