0

我尝试从谷歌提要 api 获取提要。这是我的代码:

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:该行的空对象:

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

谢谢你。

4

2 回答 2

0

我不知道您为函数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)你在评论中提到的错误是因为,正如我所说,我在这个例子中使用了另一个库,你可以从这里下载它,但我认为你不需要这样做,因为

2)感谢您的代码,我能够重建您的示例,并且我发现,至少在我的示例中,因为我得到的响应中没有“提要”实体,所以正如您提到的那样,有一个错误,我的意思是排队

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

但是,当我尝试获取在我的情况下存在的responseData条目时,您的示例。奇怪的是它存在线

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

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

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

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

问候

于 2013-02-16T19:05:47.153 回答
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();
        }
        }
于 2013-02-17T00:02:05.997 回答