JSONArray 未正确返回

JSONArray not returning correctly

我有这个 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 是格式错误还是什么?感谢任何帮助。

是的,它的格式严重错误:) 这是更正后的。

{
  "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. 第二个用户对象缺少开头 {

这是一个很好的 tool 来检查您的 JSON 文件。尝试将您的 JSON 复制粘贴到其中,然后尝试我的。你会看到区别

UPDATE Moving on to potential Java Issues:

  1. 您的 data 不是数组而是对象,但在 Java 代码中您将其解析为一个 JSONArray records = response.getJSONArray("data");

此外,问题实际上可能出在 Web 服务中。有时,当只找到一个结果时,Web 服务会将数据类型从数组 [] 更改为对象 {}。这就是为什么您将 data 解析为数组的代码对此对象失败的原因。您应该将数据服务固定为 return 它作为一个对象的数组,如 data:[{..}] 或检查 java 以查看 data 是数组还是对象。

如果您确实确认 data 始终作为对象出现(从 JSON 的上下文来看这是有意义的),然后将代码切换为不迭代 data 但要像这样迭代 data.users

 JSONObject 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"));
  }

检查以下已更正的 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"));
                            }

                    }