JSONArray没有正确返回

时间:2015-08-04 19:33:11

标签: java android json getstring

我有这个JSON数据,我正在尝试用Java进行处理。

{  
   "status":"ok",
   "data":{  
      "user_count":3,
      "limit":20,
      "page_number":1,
      "users":[  
         {  
        "id":330,
            "name":"jeff",
            "email":"xxx@hotmail.com
         },
            "id":335,
            "name":"joe",
            "email":"xxx@hotmail.com
         }
      ]
    },
}

我能够获取状态,但不会抓住所有用户,这很奇怪,因为我有另一个JSON示例可以正常工作。

这是我的代码:

                    results = response.getString("status");
                    if (results.equals("ok")) {
                        JSONArray records = response.getJSONArray("data");
                        for (int i = 0; i < records.length(); i++) {
                            JSONObject obj = records.getJSONObject(i);
                            JSONArray users = obj.getJSONArray("users");
                            for (int j = 0; j < users.length(); j++) {
                                JSONObject v_obj = users.getJSONObject(j);
                                Log.d("Dracula", v_obj.getString("id"));
                                Log.d("Dracula", v_obj.getString("name"));
                                Log.d("Dracula", v_obj.getString("email"));
                            }
                        }
                    }

JSON是否格式不正确?任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:2)

是的,它严重畸形:)这是纠正的一个。

{
  "status": "ok",
  "data": {
    "user_count": 3,
    "limit": 20,
    "page_number": 1,
    "users": [
      {
        "id": 330,
        "name": "jeff",
        "email": "xxx@hotmail.com"
      },
      {
        "id": 335,
        "name": "joe",
        "email": "xxx@hotmail.com"
      }
    ]
  }
}

JSON中的错误:

  1. 电子邮件
  2. 后缺少双引号完成
  3. 详细信息后额外,:{} object
  4. 第二个用户对象缺少空缺{
  5. 这是检查JSON文件的好tool。尝试复制粘贴你的JSON,并尝试我的。你会看到差异

      

    UPDATE   继续讨论潜在的Java问题:

    1. 您的data不是数组而是对象,但在Java代码中,您将其解析为JSONArray records = response.getJSONArray("data");
    2. 此外,Web服务中可能存在问题。有时,当只找到一个结果时,Web服务会将数组类型从array []更改为object {}。这就是为什么将data解析为数组的代码对此对象失败的原因。您应该修复数据服务,将其作为一个对象的数组返回data:[{..}],或者在java中检查以查看data是数组还是对象。

      如果确实data总是以对象形式出现(有意义地查看JSON的上下文),那么将代码切换为不在data上迭代,而是迭代{ {1}}喜欢这样:

      data.users

答案 1 :(得分:0)

检查以下更正的json,您发布的json格式不正确

{  
           "status":"ok",
           "data":{  
              "user_count":3,
              "limit":20,
              "page_number":1,
              "users":[  
                 {  
                "id":330,
                    "name":"jeff",
                    "email":"xxx@hotmail.com"
                 },
                 {
                    "id":335,
                    "name":"joe",
                    "email":"xxx@hotmail.com"
                 }
              ]
            }
        }

同样在你的java代码中:

results = response.getString("status");
                    if (results.equals("ok")) {
                        JSONArray records = response.getJSONObject("data");

                            JSONArray users = records.getJSONArray("users");
                            for (int j = 0; j < users.length(); j++) {
                                JSONObject v_obj = users.getJSONObject(j);
                                Log.d("Dracula", v_obj.getString("id"));
                                Log.d("Dracula", v_obj.getString("name"));
                                Log.d("Dracula", v_obj.getString("email"));
                            }

                    }