java - JSONArray 未正确返回

标签 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 是否格式错误,或者其他什么情况?如有任何帮助,我们将不胜感激。

最佳答案

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

{
  "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 reports = response.getJSONArray("data");

此外,问题可能实际上出在 Web 服务中。有时,当仅找到一个结果时,Web 服务会将数据类型从 array [] 更改为 object {}。这就是为什么将 data 解析为数组的代码对该对象失败的原因。您应该修复数据服务,将其作为一个对象的数组返回,如 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"));
  }

关于java - JSONArray 未正确返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31817719/

相关文章:

android - 跨 webView 和 CordovaWebView android 共享 localStorage

java - Android 在第二次启动 Activity 时关闭 Flash

javascript - Angular JS : creating table with json

c# - 使用 C# asp.net 打印 json

java - 使用 JPA 映射计算属性

JAVA 与正则表达式拆分不起作用

java - Excel 公式比较两列

java - 媒体 Controller 不适用于 Android 中的 VideoView

java - Android,SQL 数据库故障 1 语法错误?找不到catlog正在讨论的内容

java - 将json数据从android发送到php linux服务器