0

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

4

2 回答 2

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. Extra ,after details:{} 对象
  3. 第二个用户对象缺少开口{

这是检查 JSON 文件的好工具。尝试在其中复制粘贴您的 JSON,然后尝试我的。你会看到不同

更新转到潜在的 Java 问题:

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

此外,问题实际上可能出在 Web 服务中。有时,当只找到一个结果时,Web 服务会将数据类型从数组 [] 更改为对象 {}。这就是为什么解析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"));
  }
于 2015-08-04T19:35:24.707 回答
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"));
                            }

                    }
于 2015-08-04T19:37:49.663 回答