我想知道为什么我的解析代码不起作用。我正在尝试将网络服务器(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(显然是休息)。
答案 0 :(得分:0)
String jsonStr = getJson();
JSONObject json = new JSONObject(jsonStr);
创建单个Json对象。