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 错误:
- 电子邮件后缺少双引号补全
- 详细信息后的额外
,
:{} 对象
- 第二个用户对象缺少开头
{
这是一个很好的 tool 来检查您的 JSON 文件。尝试将您的 JSON 复制粘贴到其中,然后尝试我的。你会看到区别
UPDATE
Moving on to potential Java Issues:
- 您的
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"));
}
}
我有这个 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 错误:
- 电子邮件后缺少双引号补全
- 详细信息后的额外
,
:{} 对象 - 第二个用户对象缺少开头
{
这是一个很好的 tool 来检查您的 JSON 文件。尝试将您的 JSON 复制粘贴到其中,然后尝试我的。你会看到区别
UPDATE Moving on to potential Java Issues:
- 您的
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"));
}
}