Google Feed API - Json Object null

时间:2013-02-16 14:03:37

标签: java json api

我尝试从google feed api获取Feed。这是我的代码:

try{
        JSONObject googleAPI = JsonReader.readJsonFromUrl(url);
        if (googleAPI!=null){
            if (JSONUtils.isNull("feed")){
                System.out.println("No Results from this source");
            }else{  
                JSONObject feed = googleAPI.getJSONObject("feed");                      
                JSONArray entries = feed.getJSONArray("entry");                                               
                for (int i=0;i<entries.size();i++){   
                    JSONObject rItem = entries.getJSONObject(i);
                    items.add(this.parseResultItem(rItem));
                }                        

            }                
        }            
    }catch(IOException ex){
        System.out.println("Cannot read url: " + url);
    } 

网址是“https://ajax.googleapis.com/ajax/services/feed/find?v=1.0&q=”加上最后的查询。当我创建feed JsonObject时,我尝试打印它的大小(feed.size()),它是0。

另外,我得到一个错误:net.sf.json.JSONException:该行的null对象:

JSONArray entries = feed.getJSONArray("entry");  

谢谢。

2 个答案:

答案 0 :(得分:0)

我不知道您使用的函数 JsonReader.readJsonFromUrl 是什么库,如果您告诉我从哪里获取它,我可以在粘贴时测试您的示例。

我设法使用库http://www.json.org/javadoc/org/json/JSONObject.html重建您的示例。 这个例子工作正常

在我使用任何URL进行测试的示例中,您可能想告诉我们您尝试了哪些网址。

try{
    String url="https://ajax.googleapis.com/ajax/services/feed/find?v=1.0&q=Official%20Google%20Blog";
    String jsonData = getUrlContent(url);
    JSONObject googleAPI = new JSONObject(jsonData);
    if (googleAPI!=null){
        JSONObject feed = googleAPI.getJSONObject("responseData");                      
        JSONArray entries = feed.getJSONArray("entries");                                               
        for (int i=0;i<entries.length();i++){
            JSONObject rItem = entries.getJSONObject(i);
            System.out.println("found one entry: " + rItem.toString());
        }                        
    }            
}catch(IOException ex){
    System.out.println("Cannot read url: " + ex.getMessage());
}catch(JSONException ex){
    System.out.println("Problem with JSON: " + ex.getMessage());
} 

这里唯一的自定义函数是 getUrlContent ,它只接收一个URL并返回其内容。 如果你给我更多细节,我可以让这个例子更加简洁。

由于此示例有效,并且我不知道的唯一库是 JsonReader.readJsonFromUrl ,可能问题是该库

希望这有帮助

修改: 1)你在评论中提到的错误是因为,正如我所说,我在这个例子中使用了另一个库,你可以从here下载它,但我认为你不需要这样做,因为< / p>

2)感谢您的代码,我能够重建您的示例,我发现,至少在我的示例中,因为我在响应中没有“feed”实体,所以有一个错误就像你提到过,我的意思是排队

JSONArray entries = feed.getJSONArray("entry");  

但是,当我尝试获取 responseData 条目时,我的例子存在。 奇怪的是它存在行

if (JSONUtils.isNull("feed")){

这应该可以防止这种情况发生,好像我在docs中发现的那样,检查javascripts为空。也许你的困惑是因为你正在阅读我在我建立的例子中使用的库this doc! 所以你应该用这个替换那一行

if (JSONUtils.isNull(googleAPI.getJSONObject("feed"))){

我已经做到了,它运作正常。 总而言之,检查您获得的响应实际上是否包含 feed 对象。 如果您仍有问题,也许您想给我一个您要查询的网址。

此致

答案 1 :(得分:0)

这是功能:

public static JSONObject readJsonFromUrl(String url) throws IOException, JSONException {
        InputStream is = new URL(url).openStream();
        try {
            BufferedReader rd = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8")));
            String jsonText = readAll(rd);
            JSONObject json = JSONObject.fromObject(jsonText);
            return json;
        } finally {
            is.close();
        }
        }