JSON代码中的路径查找

时间:2016-09-13 19:19:42

标签: android json google-api

我正在创建一个使用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;
}

我走向道路的方法是错误的,我无法弄清楚错误在哪里。

3 个答案:

答案 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。