Java-StackExchange get JSON
Вот мой 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
У вопроса есть решение - Посмотреть?


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

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


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

HttpClient client = new DefaultHttpClient();
?




29.04.2014 10:26:16
Вы должны представить ответ как UTF-8.
И ваш второй вопрос-библиотека Джексона. Он может преобразовывать объекты json в объекты Java.


29.04.2014 10:51:01
Содержимое возвращается в виде gzip-архива. вы можете увидеть это в выводе ответа:
... Кодировка содержимого: gzip ...
Учитывая, что вы используете версию 4.3.3 клиентской библиотеки Apache HTTP, вам просто нужно сделать следующее:
HttpClient client = HttpClientBuilder.create().build();
Это позволит построить HttpClient
, который не имеет никаких проблем распаковки контента, и вы получите JSON-файл, который вы ожидаете ( в DefaultHttpClient
никак не поддерживает сжатие.)


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();