为什么将单个项String解析为JSONArray失败

时间:2014-06-07 20:09:44

标签: java android json django-rest-framework arrays

我想知道为什么我的解析代码不起作用。我正在尝试将网络服务器(GET)请求的响应转换为JASONArray。这已经适用于多个项目(使用GET http://10.0.2.2:8000/exercises)。但是,如果我尝试接收单个项目(GET http://10.0.2.2:8000/exercises/1),则会失败。我已经找到了问题的原因。 respJSON = new JSONArray(resp);似乎在[]没有包围的字符串上失败,正如您从我的示例输出中看到的那样。 谁能告诉我这里我做错了什么?我应该使用另一种方法,专门为simgle项目请求设计来处理这个吗?我可以使用一个简单的检查字符串中的第一个字符,但这是一个黑客,我不能相信这是最好的方式。

(我只发布了我使用的最小代码+输出)

HttpHost target = new HttpHost(host, port, "http");
HttpGet getRequest = new HttpGet(requestPath);
getRequest.setHeader("Content-type", "application/json");
getRequest.setHeader("Accept", "application/json");
response = httpClient.execute(target, getRequest);

entity = response.getEntity();
String resp = EntityUtils.toString(entity);
return new JSONArray(resp);

在像http://10.0.2.2:8000/exercises之类的请求上使用此代码会生成以下输出字符串,可以将其解析为JSONArray(将实际数据保留在此处,以便更好地进行比较):

[{"name": "Ringe", "duration": "20", "repeats": "no repeats", "creationtime": "2014-06-07 19:24:53.206000", "pausetime": "3", "alarmsound": "default", "description": "this is android description", "type": "repeats"}, {"name": "fingerkraft", "duration": "-1", "repeats": "10", "creationtime": "2014-06-07 18:08:03.576000", "pausetime": "20", "alarmsound": "default", "description": "asdasdasd", "type": "repeats"}, {"name": "ringe", "duration": "12", "repeats": "no", "creationtime": "2014-06-07 00:54:22.844000", "pausetime": "23", "alarmsound": "default", "description": "asdasdasd", "type": "duration"}]

但是,在http://10.0.2.2:8000/exercises/1上使用此方法会产生类似

的字符串
{"name": "ringe", "duration": "12", "repeats": "no", "creationtime": "2014-06-07 00:54:22.844000", "pausetime": "23", "alarmsound": "default", "description": "asdasdasd", "type": "duration"}

无法解析为JSONArray(返回为空)。那么,这是预期的行为吗?我使用django-rest-framework构建了API(显然是休息)。

1 个答案:

答案 0 :(得分:0)

 String jsonStr = getJson();
JSONObject json = new JSONObject(jsonStr);

创建单个Json对象。