我正在创建一个使用Google API的应用程序获取有关Google图书的提取详细信息。
从以下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;
}
我走向道路的方法是错误的,我无法弄清楚错误在哪里。
答案 0 :(得分:0)
它在第一周期迭代(1-10)中重新编写了一本书,你需要创建一个书籍列表和返回列表。
答案 1 :(得分:0)
您的班级Book
正在接收String title, JSONArray authors
作为参数,这是正确的吗?
我建议你创建List<Book> books
集合,并在每本书中添加响应所包含的内容
答案 2 :(得分:0)
当然了解JSON的工作原理很重要,对于上述答案,应该给你足够的提示,让你手动处理。我的建议是,你不要手动解析它,让自动工具为你处理。
您可以使用Gson自动解析它到工作类。 现在如何告诉Gson要解析它到底是什么?有一个很棒的工具JsonSchema2Pojo可以处理这个问题。这里有Gradle插件:https://github.com/joelittlejohn/jsonschema2pojo/tree/master/jsonschema2pojo-gradle-plugin 它能够在构建期间生成Gson可理解的类。我建议使用存储库中提供的配置并根据您的需要进行调整。
插件解释json模式以生成类,因此您需要在插件配置中指向带有模式的目录。起初它可能看起来像另一个复杂功能,但您可以使用示例答案生成模式,例如您使用http://jsonschema.net/网页粘贴的模板。
总结一下。使用Gson和jsonschema2pojo,您可以使这项任务几乎不费脑筋,并专注于更重要的任务(除非您需要编写自定义解析器的某些情况)。配置可能需要一段时间,但仍然比编写自定义解析器更快,您只需更改模式即可轻松更改它。这非常方便,特别是对于您无法控制的外部API。