Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用stackexchange API将请求解析为json_Java_Json_Stackexchange Api - Fatal编程技术网

Java 使用stackexchange API将请求解析为json

Java 使用stackexchange API将请求解析为json,java,json,stackexchange-api,Java,Json,Stackexchange Api,我正在努力解决一些与http、java和StackExchangeAPI相关的问题 将以下URL视为字符串: private static final String URLSTRING_2 = "http://freegeoip.net/json/"; 如果我在浏览器中写入此url,我会得到json的回答: 现在我试着用java和本地libs来实现这一点,因为我使用下面的代码段,到目前为止,它工作得很好 如果我解析json并尝试获取键“country_name”的值,那么

我正在努力解决一些与http、java和StackExchangeAPI相关的问题 将以下URL视为字符串:

private static final String URLSTRING_2 = "http://freegeoip.net/json/";
如果我在浏览器中写入此url,我会得到json的回答:

现在我试着用java和本地libs来实现这一点,因为我使用下面的代码段,到目前为止,它工作得很好

如果我解析json并尝试获取键“country_name”的值,那么代码片段将打印为spected“Singapore”


现在我的问题是: 如果我对这个链接也这么做

我的浏览器输出以下json:

但是如果我试图解析json,我会得到一个异常,因为我从请求中得到以下信息:

ýýýýýýýýýýýýýýýýýýýý253

对于一些甚至不是人类可读的东西

你知道为什么吗


提前感谢

StackOverflow API GZIP压缩其响应。您看到非人类可读字符字符串的原因是您试图读取GZIP压缩数据,而无需先解压缩它

您的浏览器能够读取此标题并自行进行解压缩。您的代码尚未解压

您可以通过在响应中显示的值来确认使用了GZIP压缩

    System.out.println(request.getContentEncoding());
将打印出来

gzip
幸运的是,解决这个问题相当简单。您需要将从请求中获得的
InputStream
包装为:

但是,我建议不要使用内置的Java类,而是使用一个库,例如用于发出HTTP请求。特别是,这样的库将自动检测内容编码并为您执行解压缩

gzip
    final JsonElement root = jp.parse(new InputStreamReader(new GZIPInputStream((InputStream) request.getContent()))); // Convert the input stream to a json