Java 来自URL的JSON序列化始终返回NULL

Java 来自URL的JSON序列化始终返回NULL,java,android,json,serialization,deserialization,Java,Android,Json,Serialization,Deserialization,我有一个web URL,它根据请求返回JSON格式的字符串 {"StockID":0,"LastTradePriceOnly":"494.92","ChangePercent":"0.48"} 我正在使用Java进行数据流传输 InputStream in = null; in = url.openStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(in)); StringBuilder sb =

我有一个web URL,它根据请求返回JSON格式的字符串

{"StockID":0,"LastTradePriceOnly":"494.92","ChangePercent":"0.48"}
我正在使用Java进行数据流传输

InputStream in = null;
in = url.openStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
StringBuilder sb = new StringBuilder();

String line = null;
try {
     while ((line = reader.readLine()) != null) {
     sb.append(line + "\n");
     }


} 
catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            String result = sb.toString();
但是
reader.readLine()
总是返回
null

知道我做错了什么吗

这里是实际的JSON地址

更新


虽然两个链接都有相同的服务器实现来生成JSON响应,但相同的代码可以正常工作

获取null的原因是Java发出的请求与浏览器发出的请求不同。您的浏览器包含许多请求头,除非您显式地这样做,否则Java不会填充这些请求头。不过,我不确定为什么Web服务器不响应基本请求。您可以通过执行以下操作自行测试此功能:

基本请求(无标题):

结果为:
null

带有标题的请求:

curl http://app.myallies.com/api/quote/goog  
curl \
-H "Host: app.myallies.com" \
-H "User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:33.0) Gecko/20100101 Firefox/33.0" \
-H "Accept: text/html,application/xhtml,application/xml;q=0.9,*/*;q=0.8" \
-H "Accept-Language: en-US,en;q=0.5" \
-H "Accept-Encoding: gzip, deflate" \
-H "Connection: keep-alive" \
-H "Cache-Control: max-age=0" \
http://app.myallies.com/api/quote/goog`  
结果为:
{“StockID”:0,“LastTradePriceOnly”:“496.38”,“ChangePercent”:“0.78”}


您可能需要设置一些请求头,以更接近地模拟浏览器发出的请求。

看起来它就是它想要的用户代理。以下代码适用于我:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class JSONTest {

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

        URL url = new URL("http://app.myallies.com/api/quote/goog");

        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setRequestProperty("User-Agent", "Mozilla/5.0 (X11; Linux x86_64; rv:33.0) Gecko/20100101 Firefox/33.0");
        connection.setDoInput(true);

        BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
        StringBuilder sb = new StringBuilder();

        String line = null;
         while ((line = reader.readLine()) != null) {
             sb.append(line + "\n");
         }

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

    }

}

有一个实际的错误出现了吗?谷歌有一些很好的序列化库为POJO的@没有错误,只是一个空的阅读器如果它只是一个空的阅读器,你试过刷新它吗?另外,这个:更新的问题,相同的代码在服务器上的另一个JSON资源上运行良好OK,答案是有意义的,但是如果是这样的话,那么来自完全相同代码的请求如何在服务器上运行良好呢?这才是真正让我眼花缭乱的!这很奇怪。可能是他们实现这些服务的一个缺陷。99%的时候,开发者只会在前端安装一个浏览器,所以他们永远不会注意到这个bug。哇,你说得对!我已经检查了文档,看起来您必须发送一个特殊的标志来处理用户代理,以表明您不是机器人或搜索引擎。非常感谢你,我希望我能投两次票!