0

我正在研究雅虎老板 API。应该返回 JSON 的 URL,我需要将它存储在一个字符串中然后解析它。http://developer.yahoo.com/java/howto-parseRestJava.html

我的问题:如何将 URL 响应保存在字符串中?

4

2 回答 2

0

从技术上讲,您希望在 URL InputStream 周围包装一个适当配置的 InputStreamReader 并将 Reader 复制到 StringWriter(apache commons IO 具有“将 Reader 复制到 String ”实用程序方法)。但是,为了确定 InputStreamReader 的正确字符集,您需要解析 ContentType 标头。在这种情况下,您最好使用更高级别的库,例如 apache commons HttpClient。

或者,您可以在 URL InputStream 周围包装 JSONTokener 并直接从 JSONTokener 解析 JSONObject(尽管我不完全确定令牌器如何确定正确的字符集,因此使用 HttpClient 之类的东西可能更安全)。

于 2012-07-17T00:22:28.683 回答
0
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpResponse response = (HttpResponse) httpclient.execute(httpPostRequest);//send a request and receive a response
        System.out.println("HTTPResponse received in [" + (System.currentTimeMillis()-t) + "ms]");

        HttpEntity entity = response.getEntity();

        if (entity != null) {
            // Read the content stream
            InputStream instream = entity.getContent();





            // convert content stream to a String
            String resultString= convertStreamToString(instream);
            instream.close();
            resultString = resultString.substring(1,resultString.length()-1); // remove wrapping "[" and "]"

这是功能convertStreamToString

private static String convertStreamToString(InputStream is) {

        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        StringBuilder sb = new StringBuilder();

        try {
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return sb.toString();
    }
于 2012-07-17T06:50:28.660 回答