无法从JSONData显示Json数组值

时间:2017-01-18 07:40:00

标签: java android arrays json http

我试图从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没有值

3 个答案:

答案 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);
    }