JSON: "位置0处有意外字符(<)"

3
这是获取频道概要的twitch.tv api请求:http://api.justin.tv/api/streams/summary.json?channel=mychannel。我在浏览器中发送请求,可以得到正确的结果。但是当我以编程方式发送请求时,在解析结果时会出现异常。
我使用apache HttpClient发送请求并接收响应,并使用JSON-Simple解析JSON内容。
以下是我根据api尝试从响应中获取JSON的方法:
HttpClient httpClient = HttpClients.createDefault();
HttpGet getRequest = new HttpGet(new URL("http://api.justin.tv/api/streams/summary.json?channel=mychannel").toURI());
getRequest.addHeader("Accept", "application/json");
HttpResponse response = httpClient.execute(getRequest);

BufferedReader br = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
String output;
StringBuilder builder = new StringBuilder();
while((output = br.readLine()) != null) {
    builder.append(output);
}
br.close();

JSONParser parser = new JSONParser();
Object obj = parser.parse(builder.toString()); //Exception occurs here

期望结果:{"average_bitrate":0,"viewers_count":"0","streams_count":0},但执行以上示例会导致:在位置0处出现意外字符(<)。

如何从响应中获取JSON主体? 浏览器正确显示结果。


2
作为第一步调试,我会倾倒builder的内容,并查看服务器发送给您的内容 - "< at position 0" 可能是XML响应而不是JSON,或者它可能是HTML错误页面。 - Ian Roberts
@IanRoberts,我必须更加注意,我在URL中犯了一个错误-> streamS而不是stream :) - Dragon
1个回答

2
试试这个:
        URL url = new URL("http://api.justin.tv/api/stream/summary.json?channel=mychannel");
        HttpURLConnection request1 = (HttpURLConnection) url.openConnection();
        request1.setRequestMethod("GET");
        request1.connect();
        InputStream is = request1.getInputStream();
        BufferedReader bf_reader = new BufferedReader(new InputStreamReader(is));
        StringBuilder sb = new StringBuilder();
        String line = null;
        try {
            while ((line = bf_reader.readLine()) != null) {
                sb.append(line).append("\n");
            }
        } catch (IOException e) {
        } finally {
            try {
                is.close();
            } catch (IOException e) {
            }
        }
        String responseBody = sb.toString();
        JSONParser parser = new JSONParser();
        Object obj = parser.parse(responseBody);
        System.out.println(obj);

1
是的,它可以工作。我找到了我的问题所在 - URL行不正确(streamS而不是stream)。为我自己打个脸 - Dragon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接