Java-StackExchange get JSON

29.04.2014 10:16:28 Просмотров 51 Источник

Вот мой Java-код, чтобы получить некоторую информацию от stackexchange.

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!�`"�k			  
			  				
У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/23356922/java-stackexchange-get-json#comment35772518_23356922
Я чувствую проблему с кодировкой. Вы читаете все как UTF-8 или ISO-8895-1?
https://stackoverflow.com/questions/23356922/java-stackexchange-get-json#comment35772957_23356922
@Makoto пожалуйста, смотрите обновление 1

Ответы - Java-StackExchange get JSON / Java - StackExchange get JSON

Tassos Bassoukos

29.04.2014 10:25:11

Похоже, что он сжат, который должен обрабатываться HTTPClient; попробуйте использовать конструктор и отключить сжатие .

https://stackoverflow.com/questions/23356922/java-stackexchange-get-json/23357048#comment35772979_23357048
Извините, вы можете привести пример?
https://stackoverflow.com/questions/23356922/java-stackexchange-get-json/23357048#comment35773057_23357048
HttpClient client = HttpClientBuilder.create().disableContentCompression().build‌​();
https://stackoverflow.com/questions/23356922/java-stackexchange-get-json/23357048#comment35773085_23357048
Я должен использовать это вместо HttpClient client = new DefaultHttpClient();?
https://stackoverflow.com/questions/23356922/java-stackexchange-get-json/23357048#comment35773119_23357048
О. о ... а ты как думаешь?
https://stackoverflow.com/questions/23356922/java-stackexchange-get-json/23357048#comment35773157_23357048
Я удалил свой код и добавил код ur. Но это все то же самое. Кодировка содержимого - gzip. Какие-то проблемы с этим? Пожалуйста, см. обновление 1
https://stackoverflow.com/questions/23356922/java-stackexchange-get-json/23357048#comment35773771_23357048
Если вы попробуете это, вы обнаружите, что это очень упрямо и будет отправлять только содержимое gzip. Хорошая новость заключается в том, что нет причин отключать сжатие.
Basel Darvish

29.04.2014 10:26:16

Вы должны представить ответ как UTF-8.

И ваш второй вопрос-библиотека Джексона. Он может преобразовывать объекты json в объекты Java.

https://stackoverflow.com/questions/23356922/java-stackexchange-get-json/23357069#comment35772808_23357069
Как это сделать? Я знаю, чтобы преобразовать в объект через Джексона. Но мне нужно создать класс для этих результатов. Как я должен создавать классы для Anser, пользователей, Qustions, etec.... Поэтому вместо того, чтобы создавать, если они предоставляют PI, который имеет все классы, я могу его использовать. Вот я и спросил.
Является ответом!
Brian Roach

29.04.2014 10:51:01

Содержимое возвращается в виде gzip-архива. вы можете увидеть это в выводе ответа:

... Кодировка содержимого: gzip ...

Учитывая, что вы используете версию 4.3.3 клиентской библиотеки Apache HTTP, вам просто нужно сделать следующее:

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

Это позволит построить HttpClient , который не имеет никаких проблем распаковки контента, и вы получите JSON-файл, который вы ожидаете ( в DefaultHttpClient никак не поддерживает сжатие.)

https://stackoverflow.com/questions/23356922/java-stackexchange-get-json/23357487#comment35773819_23357487
Да. Понял. Спасибо.
Hirak

29.04.2014 11:05:41

Содержание в сжатом виде. Вы можете убедиться в том, что используя

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

Чтобы получить контент, используйте что-то вроде этого.(Это Java.чистая.Версия URL-адрес. Пожалуйста, измените соответственно для httpclient)

GZIPInputStream gs = новый GZIPInputStream (соединение.getInputStream());

    BufferedReader in = new BufferedReader(new InputStreamReader(gs));
    String inputLine;
    while ((inputLine = in.readLine()) != null)
        System.out.println(inputLine);
    in.close();
Закрыть X