如何处理不同的json结果

时间:2016-09-27 05:38:44

标签: android parsing retrofit

我想从baidu music 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

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.返回jason:一个是billboard21,另一个是billboard23。如果我想使用retrofit2来访问api并解析返回jason,我应该定义两个不同的java类来处理这两个不同的返回吗?面对大约17种类型,如果不想创建17个java类,我怎么能处理这种情况?

我的访问权限是:

@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返回。任何人都可以帮我解决这个问题吗?非常感谢。

1 个答案:

答案 0 :(得分: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]