Разбор ответа Json от Yahoo BOSS. ошибка
Я пытаюсь передать строку ответа Json в качестве аргумента jsonObject, как показано в Yahoo http://developer.yahoo.com/java/howto-parseRestJava.html в следующем коде, это для того, чтобы получить поиск Yahoo Результаты:
/**
* ParseYahooSearchResultsJSON.java
* This example shows how to parse Yahoo! Web Service search results returned in JSON format.
*
* @author Daniel Jones www.danieljones.org
*/
import java.io.*;
import org.json.*;
import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.methods.*;
public class ParseYahooSearchResultsJSON {
public static void main(String[] args) throws Exception {
String request = "http://api.search.yahoo.com/WebSearchService/V1/webSearch?appid=YahooDemo&query=umbrella&results=10&output=json";
HttpClient client = new HttpClient();
GetMethod method = new GetMethod(request);
// Send GET request
int statusCode = client.executeMethod(method);
if (statusCode != HttpStatus.SC_OK) {
System.err.println("Method failed: " + method.getStatusLine());
}
InputStream rstream = null;
// Get the response body
rstream = method.getResponseBodyAsStream();
// Process the response from Yahoo! Web Services
BufferedReader br = new BufferedReader(new InputStreamReader(rstream));
String jsonString = "";
String line;
while ((line = br.readLine()) != null) {
jsonString += line;
}
br.close();
// Construct a JSONObject from a source JSON text string.
// A JSONObject is an unordered collection of name/value pairs. Its external
// form is a string wrapped in curly braces with colons between the names
// and values, and commas between the values and names.
JSONObject jo = new JSONObject(jsonString);
// A JSONArray is an ordered sequence of values. Its external form is a
// string wrapped in square brackets with commas between the values.
JSONArray ja;
// Get the JSONObject value associated with the search result key.
jo = jo.getJSONObject("ResultSet");
//System.out.println(jo.toString());
// Get the JSONArray value associated with the Result key
ja = jo.getJSONArray("Result");
// Get the number of search results in this set
int resultCount = ja.length();
// Loop over each result and print the title, summary, and URL
for (int i = 0; i < resultCount; i++)
{
JSONObject resultObject = ja.getJSONObject(i);
System.out.println(resultObject.get("Title"));
System.out.println(resultObject.get("Summary"));
System.out.println(resultObject.get("Url"));
System.out.println("--");
}
}
}
После добавления необходимого кода для аутентификации и включения необходимых jar-файлов я получаю следующую ошибку:
JSONObject ["ResultSet"] не найден. в org.json.JSONObject.get(JSONObject.java:422) в org.json.JSONObject.getJSONObject(JSONObject.java:516) в SignPostTest.parseResponse(SignPostTest.java:187) в SignPostTest.jj 222)
Это начало строки ответа Json:
{"bossresponse":{"responsecode":"200","web":{"start":"0","count":"50","totalresults":"36800","results":[{"date": "","clickurl":"http:\/\/uk.news.yahoo.com\/apple\/","url":"http:\/\/uk.news.yahoo.com\/apple\/","dispurl":"uk.news.yahoo.com\/apple","title":"Latest Apple news | headlines – Yahoo! News UK","abstract":"Get the latest Apple news on Yahoo! News UK. Find in-depth commentary on Apple in our full coverage news section."},{"date": "","clickurl":"http:\/\/answers.yahoo.com\/question\/index?qid=20080113074727AAuSMGy","url":"http:\/\/answers.yahoo.com\/question\/index?qid=20080113074727AAuSMGy","dispurl":"answers.yahoo.com\/question\/index?qid=20080113074727AAuSMGy","title":"JailBreak <b>Ipod? - Yahoo<\/b>! Answers","abstract":"Best Answer: Jailbreaking Guide ok jailbreaking is when you download the AppSnapp (found at www.jailbreakme.com) application to your iPod touch after first ..."},{"date":
глядя на ответ и имена объектов, кажется, что Yahoo внесла некоторые изменения в свой ответ, и я изменил следующие две строки их кода на:
// Get the JSONObject value associated with the search result key.
jo = jo.getJSONObject("bossresponse");
// Get the JSONArray value associated with the Result key
ja = jo.getJSONArray("results");
Я все еще получаю ошибку:
org.json.JSONException: JSONObject ["results"] не найден. в org.json.JSONObject.get(JSONObject.java:422) в org.json.JSONObject.getJSONArray(JSONObject.java:498) в SignPostTest.parseResponse(SignPostTest.java:185) в SignPostTest.main.Sign: знак:222)
Я не знаю, где проблема. Это первый раз, когда я делаю анализ JSON. Я мог бы иметь недоразумение в той или иной точке. Просьба уточнить.
1 ответ
Вышеупомянутый URL Yahoo отправляет сообщение об ошибке в виде ответа json, которое указано в описании.
"Служба была закрыта. Дополнительные сведения см. В блоге Deprecated Services http://developer.yahoo.com/blogs/ydn/posts/2010/08/api_updates_and_changes".
По этой причине вы не можете получить доступ к ожидаемым атрибутам JSON Response.