我正在创建一个使用Google API获取有关Google Books的详细信息的应用程序。
从下面的JSON链接中,我想检索关于作者和书名的数据。
https://www.googleapis.com/books/v1/volumes?q=android我解决这个问题的方法:
private Book extractFeatureFromJson(String bookJSON) {
try {
JSONObject baseJsonResponse = new JSONObject(bookJSON);
JSONArray items = baseJsonResponse.getJSONArray("items");
// If there are results in the features array
for(int i=0;i<10;i++)
{
JSONObject firstFeature = items.getJSONObject(i);
JSONObject volumeinfo=firstFeature.getJSONObject("volumeinfo");
String title=volumeinfo.getString("title");
JSONArray author= volumeinfo.getJSONArray("authors");
for(int j=0;j<author.length();j++)
{
JSONObject authorFeature=author.getJSONObject(j);
}
// Create a new {@link Event} object
return new Book(title,author);
}
} catch (JSONException e) {
Log.e(LOG_TAG, "Problem parsing the earthquake JSON results", e);
}
return null;
}
我对路径的态度是错误的,我不知道哪里错了
它在第一次循环迭代(1-10)时返回一本图书,您需要创建一个图书列表和返回列表。
您的类Book
接收String title, JSONArray authors
作为参数,对吗?
我建议您创建List<Book> books
集合并将响应包含的每本书添加到此
当然理解json是如何工作的是很重要的,对于这一点,上面的答案应该给你足够的提示,让你手动处理它。我的建议是,你不要手动解析它,让自动工具为你处理它。
你可以用Gson自动解析它到工作类。现在如何告诉Gson将其解析为什么?有一个很棒的工具JsonSchema2Pojo可以处理这个问题。Gradle插件在这里:https://github.com/joelittlejohn/jsonschema2pojo/tree/master/jsonschema2pojo-gradle-plugin它能够在构建时生成Gson可以理解的类。我建议使用存储库中提供的配置,并根据您的需要进行调整。
插件解释json模式来生成类,所以你需要在插件配置中指向带有模式的目录。起初,它可能看起来像另一个复杂的问题,但您可以使用示例答案生成模式,就像您在http://jsonschema.net/网页上粘贴的那样。
总结一下。使用Gson和jsonschema2pojo,您可以使这个任务几乎不需要动大脑,并专注于更重要的任务(除了需要编写自定义解析器的某些情况)。配置可能需要一段时间,但它仍然比编写自定义解析器快得多,并且您可以通过更改模式轻松地更改它。