2016-05-28 5 views
1

У меня есть этот JSon результата http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=25&q=http://www.abc.net.au/news/feed/51120/rss.xmlAndroid JSON элемент эскизов доступа

Я пытаюсь получить доступ к эскизам для каждой статьи новостей, расположенной в записи> mediaGroups> содержание> эскизы> URL

Однако я не уверен, как для доступа к этому в глубине элемента. Это мой код до сих пор.

public List<NewsObj> constructJSON(String jsonIN){ 
    ArrayList<NewsObj> newsList = new ArrayList<>(); 
    try{ 
     //add more levels to extract json 
     JSONObject jsonObject1 = new JSONObject(jsonIN); 
     String responseData = jsonObject1.getString("responseData"); 
     Log.d("RECEIVEJSONOBJECTLEVEL1",responseData); 

     JSONObject jsonObject2 = new JSONObject(responseData); 
     String feed = jsonObject2.getString("feed"); 
     Log.d("RECEIVEJSONOBJECTLEVEL2",feed); 

     JSONObject jsonObject3 = new JSONObject(feed); 
     String entries = jsonObject3.getString("entries"); 
     Log.d("RECEIVEJSONOBJECTLEVEL3", entries); 

     JSONArray jsonArray1 = new JSONArray(entries); 
     for(int i=0; i<jsonArray1.length();i++){ 
      JSONObject mediaGroups = jsonArray1.getJSONObject(i); 
      String mediaItems = mediaGroups.getString("mediaGroups"); 
      String title = mediaGroups.getString("title"); 
      String url = mediaGroups.getString("link"); 
      String description = mediaGroups.getString("contentSnippet"); 
      String publishedDate = mediaGroups.getString("publishedDate"); 
//    main information for news article 

      //for further thumbnail sizes? 
      JSONArray jsonArray2 = new JSONArray(mediaItems); 
      for(int j=0;j<jsonArray2.length();j++){ 
       JSONObject contents = jsonArray2.getJSONObject(j); 
       String contentItems = contents.getString("contents"); 
       Log.d("RECEIVEJSONOBJECTARRAY2",contentItems); 

       JSONArray jsonArray3 = new JSONArray(contentItems); 
       for(int k=0;k<jsonArray3.length();k++){ 
        JSONObject items = jsonArray3.getJSONObject(k); 
        //too specific 
        String imgurl = items.getString("url"); 
        //Log.d("RECEIVEJSONOBJECTARRAY3",imgurl); 
        NewsObj aObj = new NewsObj(title, imgurl,url, publishedDate); 
        newsList.add(aObj); 
       } 
      } 
     } 

    }catch (JSONException e){ 
     e.printStackTrace(); 
     Log.d("RECEIVEJSONERROR",e.toString()); 
    } 
    return newsList; 
} 
+0

Вы собираетесь продолжать получать ссылки о том, как разобрать JSON, если вы продолжаете задавать тот же вопрос :) Если вы хотите более простое решение, рассмотреть вопрос об использовании Gson (и Модернизация, если хотите). И использовать этот сайт для создания некоторых классов Java http://www.jsonschema2pojo.org –

+0

Спасибо, будет ли Gson или retrofit намного проще? – JianYA

+1

Retrofit превращает API REST в основном Java-методы (он имеет несколько высокую кривую обучения), а Gson используется для десериализации строки JSON в объект Java без необходимости вручную перемещаться и анализировать себя. Это звучит проще для меня –

ответ

1

Вам просто нужно сделать еще один JSONArray для миниатюр. Справочно See Example

Try This

public List<NewsObj> constructJSON(String jsonIN){ 
ArrayList<NewsObj> newsList = new ArrayList<>(); 
try{ 
    //add more levels to extract json 
    JSONObject jsonObject1 = new JSONObject(jsonIN); 
    String responseData = jsonObject1.getString("responseData"); 
    Log.d("RECEIVEJSONOBJECTLEVEL1",responseData); 

    JSONObject jsonObject2 = new JSONObject(responseData); 
    String feed = jsonObject2.getString("feed"); 
    Log.d("RECEIVEJSONOBJECTLEVEL2",feed); 

    JSONObject jsonObject3 = new JSONObject(feed); 
    String entries = jsonObject3.getString("entries"); 
    Log.d("RECEIVEJSONOBJECTLEVEL3", entries); 

    JSONArray jsonArray1 = new JSONArray(entries); 
    for(int i=0; i<jsonArray1.length();i++){ 
     JSONObject mediaGroups = jsonArray1.getJSONObject(i); 
     String mediaItems = mediaGroups.getString("mediaGroups"); 
     String title = mediaGroups.getString("title"); 
     String url = mediaGroups.getString("link"); 
     String description = mediaGroups.getString("contentSnippet"); 
     String publishedDate = mediaGroups.getString("publishedDate"); 
     //    main information for news article 

     //for further thumbnail sizes? 
     JSONArray jsonArray2 = new JSONArray(mediaItems); 
     for(int j=0;j<jsonArray2.length();j++){ 
      JSONObject contents = jsonArray2.getJSONObject(j); 
      String contentItems = contents.getString("contents"); 
      Log.d("RECEIVEJSONOBJECTARRAY2",contentItems); 

      JSONArray jsonArray3 = new JSONArray(contentItems); 
      for(int k=0;k<jsonArray3.length();k++){ 
       JSONObject items = jsonArray3.getJSONObject(k); 
       //too specific 
       String imgurl = items.getString("url"); 
       //Log.d("RECEIVEJSONOBJECTARRAY3",imgurl); 

       String thumbnails = items.getString("thumbnails"); 

       JSONArray jsonArray4 = new JSONArray(thumbnails); 
       for(int l=0;l<jsonArray4.length();l++){ 
       JSONObject thumbnails1 = jsonArray4.getJSONObject(l); 

       String height = items.getString("height"); 
       String width = items.getString("width"); 
       String thumburl = items.getString("url"); 

       } 
       NewsObj aObj = new NewsObj(title, imgurl,url, publishedDate); 
       newsList.add(aObj); 
      } 
     } 
    } 

}catch (JSONException e){ 
    e.printStackTrace(); 
    Log.d("RECEIVEJSONERROR",e.toString()); 
} 
return newsList; 
} 
+0

Привет, большое вам спасибо. Он работает, но я получаю 5 результатов за эскиз с разными разрешениями, как я могу получить только один из них? – JianYA

+0

да, потому что его массив, поэтому у вас есть 5 значений, так что теперь, если вы просто хотите 1 значение, вам нужно поставить условие там, чтобы получить только одно значение. –

+0

Я видел, что все 5 результатов одинаковы для Key 'contents', поэтому вам нужно управлять ими из веб-сервиса. Думаю –

Смежные вопросы