【问题标题】:Path finding in JSON CodeJSON 代码中的路径查找
【发布时间】:2016-09-13 19:19:41
【问题描述】:

我正在创建一个应用程序,它使用 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;
}

我对路径的方法是错误的,我无法弄清楚错误在哪里。

【问题讨论】:

标签: android json google-api


【解决方案1】:

它在第一次循环迭代(1-10)时重新调整一本书,你需要创建一个书籍列表和返回列表。

【讨论】:

    【解决方案2】:

    您的班级Book 正在接收String title, JSONArray authors 作为参数,对吗?

    我建议您创建 List&lt;Book&gt; books 集合并将响应包含的每本书添加到此集合

    【讨论】:

      【解决方案3】:

      当然,了解 JSON 的工作原理很重要,对于这个上面的答案应该给你足够的提示,让你手动处理这个问题。不过我的建议是,您不要手动解析它,而是让自动工具为您处理。

      您可以使用 Gson 自动将其解析为工作类。 现在如何告诉 Gson 将其解析为什么?有一个很棒的工具叫做 JsonSchema2Pojo 可以处理这个问题。 Gradle 插件在这里:https://github.com/joelittlejohn/jsonschema2pojo/tree/master/jsonschema2pojo-gradle-plugin 它能够在构建时生成 Gson 可以理解的类。我建议使用存储库中提供的配置并根据您的需要进行调整。

      插件解释 json 模式以生成类,因此您需要在插件配置中使用模式指向目录。起初它可能看起来像另一个复杂的问题,但您可以使用示例答案生成架构,例如您在上面使用 http://jsonschema.net/ 网页粘贴的答案。

      总结一下。使用 Gson 和 jsonschema2pojo,您可以轻松完成这项任务,并专注于更重要的任务(除了一些需要编写自定义解析器的情况)。配置可能需要一段时间,但仍然比编写自定义解析器快得多,您只需更改模式即可轻松更改它。这很方便,尤其是对于您无法控制的外部 API。

      【讨论】:

        猜你喜欢
        • 2017-05-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-06-10
        • 2016-09-05
        • 1970-01-01
        相关资源
        最近更新 更多