我尝试从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");
谢谢。
答案 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”实体,所以有一个错误就像你提到过,我的意思是排队 但是,当我尝试获取 responseData 和条目时,我的例子存在。
奇怪的是它存在行 这应该可以防止这种情况发生,好像我在docs中发现的那样,检查javascripts为空。也许你的困惑是因为你正在阅读我在我建立的例子中使用的库this doc!
所以你应该用这个替换那一行 我已经做到了,它运作正常。
总而言之,检查您获得的响应实际上是否包含 feed 对象。
如果您仍有问题,也许您想给我一个您要查询的网址。 此致JSONArray entries = feed.getJSONArray("entry");
if (JSONUtils.isNull("feed")){
if (JSONUtils.isNull(googleAPI.getJSONObject("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();
}
}