0

GoogleFeedAPIからフィードを取得しようとしています。これは私のコードです:

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

URLは「https://ajax.googleapis.com/ajax/services/feed/find?v=1.0&q=」と最後にクエリです。フィードJsonObjectを作成するとき、そのサイズ(feed.size())を出力しようとしますが、0です。

また、エラーが発生します:net.sf.json.JSONException:次の行のnullオブジェクト:

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

ありがとうございました。

4

2 に答える 2

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 に答える
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());
} 

ここにある唯一のカスタム関数は、URL を受け取ってそのコンテンツを返すだけのgetUrlContentです。詳細を教えていただければ、この例をあなたのものに近づけることができます。

この例は機能し、私が知らない唯一のライブラリはJsonReader.readJsonFromUrlであるため、おそらく問題はそのライブラリです

お役に立てれば

編集:1)コメントで言及したエラーは、私が述べたように、この例では別のライブラリを使用しているためです。ここからダウンロードできますが、それを行う必要はないと思います。

2)あなたのコードのおかげで、私はあなたの例を再構築することができました.少なくとも私の例では、私が得た応答に「フィード」エンティティがないため、あなたが言及したようにエラーがあることがわかりました.私はラインで意味します

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

しかし、私の場合に存在するresponseDataエントリを取得しようとしたときの例。奇妙なのは、それが存在するということです

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

docsで見つけたように、これはJavaScriptのnullをチェックします。多分あなたの混乱は、私が構築した例で使用したライブラリ用のこのドキュメントを読んでいるためです! したがって、その行をこの行に置き換える必要があります

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

私はそれを行い、正しく動作します。つまり、取得している応答に実際にフィードオブジェクトが含まれていることを確認します。それでも問題が解決しない場合は、照会している URL を教えてください。

よろしく

于 2013-02-16T19:05:47.153 に答える