Java-StackExchange获取JSON

Java-StackExchange获取JSON,java,json,stackexchange,stackexchange-api,Java,Json,Stackexchange,Stackexchange Api,下面是我从stackexchange获取一些信息的Java代码 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.InputStreamReader; import org.apache.http.HttpResponse; import org.apache.http.client.HttpCl

下面是我从stackexchange获取一些信息的Java代码

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.InputStreamReader;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

public class StackExchangeConnect {

    private static final String URL = "http://api.stackexchange.com/2.2/answers?key=U4DMV*8nvpm3EOpvf69Rxw((&site=stackoverflow&fromdate=1396310400&todate=1398729600&order=desc&sort=activity&filter=default";

    public static void main(String[] args) throws Exception {

        StackExchangeConnect http = new StackExchangeConnect();

        System.out.println("Testing 1 - Send Http GET request");
        http.sendGet();

    }

    // HTTP GET request
    private void sendGet() throws Exception {

        HttpClient client = new DefaultHttpClient();
        HttpGet request = new HttpGet(URL);

        // add request header
        request.addHeader("Accept", "application/json");

        HttpResponse response = client.execute(request);

        System.out.println("Response Code : "
                + response.getStatusLine().getStatusCode());

        BufferedReader rd = new BufferedReader(new InputStreamReader(response
                .getEntity().getContent()));

        StringBuffer result = new StringBuffer();
        String line = "";
        while ((line = rd.readLine()) != null) {
            result.append(line);
        }

        System.out.println(result.toString());

    }

}
我在我的控制台里得到了跟踪

Testing 1 - Send Http GET request
Response Code : 200
�
我试着将内容写入文件,就像

�\00\00\00\00\00\00�Z�n�H�Cy�;_�`df1��&���.F�ٔK���|I���eƒ�M�,GO�Ev��:U�_gE����_g���U����ʭ7�i�r5���t��]uUd�ʤZW����]���n\���l]�y�pW���[�uӬ�$���;�W��4�:��2��&��:�6�L�N8�2���)�,18?ԯ1Q���E�VMa�ի����_�1�-+���<\�̲}��sS��E��^�co�[W��{y;�:f�n�NgE}e�u��r��E�Ng�-+x8����{S���Uf���V�c!�`wY�xl�r݂n�����әY�w��J�.��quw�h��v\00�0!�`"�kIt looks like it's compressed, w hich should be handled by HTTPClient; try using the builder and disabling compression.

You should render the response as UTF-8.

And your second question is the Jackson library. It can conver json objects into Java objects.

The content being returned is gzip compressed. you can see this in your output of the response:

... Content-Encoding: gzip ...

Given that you're using the 4.3.3 version of the Apache HTTP client library, you simply need to do the following:

HttpClient client = HttpClientBuilder.create().build();

�\00\00\00\00\00\00�Z�N�H�赛义德�;_�`df1��&���.F�ٔK���|我���eƒ�M�,去�电动汽车��:U�_通用电气����_G���U����ʭ7�我�r5���T��]uUd�ʤZW����]���n\���l]�Y�嗯���[�uӬ�$���;�W��4.�:��2.��&��:�6.�L�N8�2.���)�,18?ԯ1Q���E�VMa�ի����_�1.�-+��� 它看起来像是压缩的,应该由HTTPClient处理;尝试使用生成器和。

您应该将响应呈现为UTF-8


第二个问题是Jackson库。它可以将json对象转换为Java对象。

返回的内容是gzip压缩的。您可以在响应的输出中看到这一点:

…内容编码:gzip

鉴于您正在使用4.3.3版本的Apache HTTP客户端库,您只需执行以下操作:

 System.out.println(connection.getContentEncoding());

这将构造一个解压内容没有问题的
HttpClient
,您将获得所需的JSON(默认HttpClient
不支持压缩)。

内容是gzip。您可以使用

    BufferedReader in = new BufferedReader(new InputStreamReader(gs));
    String inputLine;
    while ((inputLine = in.readLine()) != null)
        System.out.println(inputLine);
    in.close();
要获取内容,请使用以下内容。(这是java.net.URl版本。请对httpclient进行相应更改)

GZIPInputStream gs=新的GZIPInputStream(connection.getInputStream())


我感觉到一个编码问题。你是以UTF-8或ISO-8895-1的形式阅读所有内容吗?@Makoto请查看更新1如何呈现它?我知道通过Jackson转换为Object。但我需要为这些结果创建类。就像我必须为Ansers、Users、Qustions、etec创建类一样……因此,与其创建它们是否提供了具有l类别我可以使用它。所以我问。对不起,你能举个例子吗?
HttpClient-client=HttpClientBuilder.create().disableContentCompression().build();
我必须使用它,而不是
HttpClient=new DefaultHttpClient()
?O.O…你怎么看?我删除了我的代码并添加了你的代码。但还是一样。内容编码是gzip。有问题吗?请参阅更新1。是的。收到了。谢谢。