2016-09-13 75 views
-1

我正在創建一個應用程序,它使用Google API獲取有關Google圖書的獲取詳細信息。在JSON代碼中尋找路徑

從下面的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

你可以把JSON響應? –

+0

這裏是先生https://www.googleapis.com/books/v1/volumes?q=android –

+0

'author.getJSONObject(j);'你認爲'authors'的內容是對象的是什麼? – njzk2

回答

0

它在第一次循環迭代(1-10)時回退一本書,您需要創建書籍列表並返回列表。

0

您的班級Book正在收到String title, JSONArray authors作爲參數,是嗎?

我建議你創建List<Book> books收集和補充一點,響應包含

0

當然理解JSONs如何工作是重要的,這上面的答案應該給你足夠的提示,讓您手動處理這每本書。我的建議是,你不要手動解析它,讓自動工具爲你處理。

你可以用Gson自動解析它到工作類。 現在該如何告訴Gson要解析它?有一個稱爲JsonSchema2Pojo的好工具可以處理這個問題。 Gradle插件在這裏:https://github.com/joelittlejohn/jsonschema2pojo/tree/master/jsonschema2pojo-gradle-plugin 它能夠生成Gson在構建時可以理解的類。我建議使用存儲庫中提供的配置並根據需要調整它。

該插件解釋json模式以生成類,因此您需要在插件配置中指向包含模式的目錄。起初,它可能看起來像另一個複雜的事情,但你可以使用例如上面使用http://jsonschema.net/網頁粘貼的示例答案來生成模式。

所以總結一下。使用Gson和jsonschema2pojo,你可以讓這個任務幾乎毫無頭緒,並專注於更重要的任務(除了需要編寫自定義分析器時的某些情況)。配置可能需要一段時間,但仍然比編寫自定義分析器更快,您只需更改模式即可輕鬆更改配置。這尤其適用於您無法控制的外部API。