簡體   English   中英

JSON 代碼中的路徑查找

[英]Path finding in JSON Code

我正在創建一個使用 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,您幾乎可以輕松完成這項任務,並專注於更重要的任務(除了某些需要編寫自定義解析器的情況)。 配置可能需要一段時間,但它仍然比編寫自定義解析器快得多,您只需更改架構即可輕松更改它。 這非常有用,尤其是對於您無法控制的外部 API。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM