2016-05-28 47 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或翻新会更简单吗? – JianYA

+1

Retrofit将REST API转化为基本的Java方法(它具有较高的学习曲线),而Gson则用于将JSON字符串反序列化为Java对象,而无需手动遍历和解析自己。这听起来更简单 –

回答

1

你只需要再拍JSONArray缩略图。仅供参考See Example

尝试这个

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个结果都是相同的密钥'内容'所以你需要管理那些从网络服务我认为 –