2016-09-27 106 views
0

我想从百度音乐web api获取信息。我用下面拖链接: http://openapi.baidu.com/rest/2.0/music/billboard/billlist?page_size=50&timestamp=2016-09-22+18%3A47%3A54&sign=b2e34bd4b6c19a065d5a7e49e591a41b&session_key=9mzdDcHtDENrxP3Spvk7ZFbNHNijT8l8fN%2BfI%2Fe3U5rh3U5g%2FDVvjZyqB48aJaYO5qaqw4JbugF79hgAQ%2FGBIixUSuaP&type=21&page_no=1如何处理不同的json结果

http://openapi.baidu.com/rest/2.0/music/billboard/billlist?page_size=50&timestamp=2016-09-26+17%3A42%3A18&sign=62cc904c8ff2817280f699a4bd4b6496&session_key=9mzdDcHtDENrxP3Spvk7ZFbNHNijT8l8fN%2BfI%2Fe3U5rh3U5g%2FDVvjZyqB48aJaYO5qaqw4JbugF79hgAQ%2FGBIixUSuaP&type=23&page_no=1

唯一的类型是不同的。一个是23,另一个是21.对于归来贾森:一个是广告牌21,另一个是广告牌23。如果我想使用retrofit2来访问api并解析返回jason,我应该定义两个不同的java类来处理这两个不同的返回吗?面对大约有17种类型,如果不想创建17个java类,我该如何处理这种情况?

我访问API是:

@GET("/rest/2.0/music/billboard/billlist") 
Call<BaiduBillListContainer> getBillList(@Query("timestamp") String timestamp, 
             @Query("type") String type, 
             @Query("sign") String sign, 
             @Query("session_key") String sessionkey, 
             @Query("page_size") String pagesize, 
             @Query("page_no") String pageno); 

BaiduBillListContainer.java定义:

public class BaiduBillListContainer implements Serializable { 
    BaiduBillList billboard21; 

    public BaiduBillList getBillBoardInfo() { 
     return billboard21; 
    } 

    public void setBillBoardInfo(BaiduBillList billBoardInfo) { 
     this.billboard21 = billBoardInfo; 
    } 
} 

它不能用来获取billboard23回报。任何人都可以帮助我解决这个问题?非常感谢。

+0

难道你创建的本地数据库的呢?如果是,您可以创建一个主表和不同的子表。主表包含所有信息。子表包含它们的唯一标识和类型。所以你必须为所有的细节和17个子类创建unique_id和类型 –

+0

你必须声明不同的java类来解析不同的json键 –

+0

你可以接收jsonObject(使用retrofit)并动态地将其转换为数组从它得到jsonArray后pojo的。你可以检出这个答案(http://stackoverflow.com/questions/24279245/how-to-handle-dynamic-json-in-retrofit#answer-28576252) –

回答

0

试试这个:

public class BaiduBillListContainer implements Serializable { 
    Map<String,BaiduBillList> billboard; 

    public Map<String,BaiduBillList> getBillBoardInfo() { 
     return billboard; 
    } 

    public void setBillBoardInfo(Map<String,BaiduBillList> billBoardInfo) { 
     this.billboard= billBoardInfo; 
    } 
} 

然后从地图调用类似的广告牌:

Map<String,BaiduBillList> getBBData=response.body(); 

BaiduBillList receivedBBList=getBBData.values().toArray()[0]