【问题标题】:Google Feed API - Json Object nullGoogle Feed API - Json 对象为空
【发布时间】:2013-02-16 14:03:37
【问题描述】:

我尝试从 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=”加上最后一个查询。当我创建提要 JsonObject 时,我尝试打印它的大小 (feed.size()),它是 0。

另外,我得到一个错误:net.sf.json.JSONException: null object for the line:

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

谢谢。

【问题讨论】:

标签: java json api


【解决方案1】:

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

我已经设法使用库 http://www.json.org/javadoc/org/json/JSONObject.html 重建了您的示例。 这个例子运行良好

在示例中,我使用任何 URL 进行测试,也许你想告诉我们你正在尝试什么 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下载它,但我认为你不需要这样做,因为

2) 多亏了您的代码,我能够重建您的示例,并且我发现,至少在我的示例中,由于我得到的响应中没有“提要”实体,因此出现错误你提到的,我的意思是排队

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

但是,当我尝试获取在我的情况下存在的 responseDataentries 时,您的示例。 奇怪的是它存在行

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

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

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

我已经做到了,它工作正常。 因此,总而言之,检查您收到的响应是否实际包含 feed 对象。 如果你还有问题,也许你想给我你正在查询的 URL。

问候

【讨论】:

  • 你的代码给我的 attr jsonData 错误: JSONObject googleAPI = new JSONObject(jsonData);它可能需要空的构造函数。
【解决方案2】:

这是函数:

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

【讨论】:

    猜你喜欢
    • 2012-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多