Gson解析嵌套json

最近发现Android Studio 有一个插件 GsonFormat,根据json数据格式生成相应的实体类。

----------------------------------------------------------------------------------------------------------------------------------------------------------------


测试api接口:http://v5.pc.duomi.com/search-ajaxsearch-searchall?kw=json&pi=1&pz=20

请求得到的测试json:

{
    "album_offset":0,
    "albums":[
        {
            "artists":[
                {
                    "id":51066987,
                    "name":"Björn J:son Lindh",
                    "portrait":"http://pic.cdn.duomi.com/imageproxy2/dimgm/scaleImage?url=http://img.kxting.cn//p1/06/05/70553774.jpg&w=150&h=150&s=100&c=0&o=0&m=",
                    "valid":true
                }
            ],
            "available":true,
            "company":"",
            "cover":"http://pic.cdn.duomi.com/imageproxy2/dimgm/scaleImage?url=http://img.kxting.cn//p1/24/04/71031316.jpg&w=150&h=150&s=100&c=0&o=0&m=",
            "id":2022121,
            "name":"Våta Vingar",
            "num_tracks":1,
            "release_date":"1980-01-01",
            "type":"专辑"
        }
    ],
    "artist_offset":0,
    "artists":[
        {
            "id":60030973,
            "name":"J-Son",
            "num_albums":0,
            "num_tracks":0,
            "portrait":"http://pic.cdn.duomi.com/imageproxy2/dimgm/scaleImage?url=http://img.kxting.cn//p1/11/01/70559545.jpg&w=150&h=150&s=100&c=0&o=0&m=",
            "valid":true
        },
        {
            "id":51066987,
            "name":"Björn J:son Lindh",
            "num_albums":1,
            "num_tracks":1,
            "portrait":"http://pic.cdn.duomi.com/imageproxy2/dimgm/scaleImage?url=http://img.kxting.cn//p1/06/05/70553774.jpg&w=150&h=150&s=100&c=0&o=0&m=",
            "valid":true
        }
    ],
    "dm_error":0,
    "error_msg":"操作成功",
    "recommend":0,
    "total_albums":1,
    "total_artists":2,
    "total_tracks":1,
    "track_offset":0,
    "tracks":[
        {
            "album":{
                "cover":"/p1/24/04/71031316.jpg",
                "id":2022121,
                "name":"Våta Vingar"
            },
            "artists":[
                {
                    "id":51066987,
                    "name":"Björn J:son Lindh",
                    "num_albums":1,
                    "num_tracks":1,
                    "portrait":"/p1/06/05/70553774.jpg",
                    "valid":true
                }
            ],
            "availability":"1110",
            "dlyric":"",
            "id":21716970,
            "medias":[
                {
                    "bitrate":192,
                    "p2purl":"E2A851756465FD0112050000009691010300000063.mp3"
                }
            ],
            "mv":0,
            "slyric":"",
            "title":"Brusa Högre Lilla å",
            "isdown":"1",
            "isplay":"1"
        }
    ]
}

json在线格式化可以用这个地址:http://json.cn/

Gson解析嵌套json_第1张图片

如上所示:


值以“[]”包括的是数组list类型的(上面的Array)

于是新建一个类Bean:

Gson解析嵌套json_第2张图片


albums 、artists、 tracks 都是"[]"包含的,所以为list。

第一层就写完了,继续往下走;



albums:

Gson解析嵌套json_第3张图片

新建AlbumsBean类:

Gson解析嵌套json_第4张图片


artists值为数组,用list。


artists:

Gson解析嵌套json_第5张图片

新建ArtistsBean类:

Gson解析嵌套json_第6张图片

tracks:

Gson解析嵌套json_第7张图片


新建TracksBean类:

artists与上面一样,直接用ArtistsBean即可。

Gson解析嵌套json_第8张图片

于是,第二层也走完了。


第三层

track里的album类和medias数组

新建AlbumBean



MediasBean


于是,完成了。


最后别忘了生成get() 、set()函数

Gson解析:

Gson gson = new Gson();
java.lang.reflect.Type type = new TypeToken() {
}.getType();
Bean bean = gson.fromJson(string, type);


Android studio 生成get() 、set()函数 快捷方式

先写类的属性——>  空白处右键——> Generate...——>Getter and Setter 。


这样写就是建的类有点多,不过也可以写出内部类。


--------------------------------------------------------------------------------------------------------------

其实有更简单的,上面写的麻烦了。


举例:

"artists":[
                {
                    "id":50001179,
                    "name":"张杰",
                    "portrait":"http://pic.cdn.duomi.com/imageproxy2/dimgm/scaleImage?url=http://img.kxting.cn//p1/01/23/71260817.jpg&w=150&h=150&s=100&c=0&o=0&m=",
                    "valid":true
                }

]

由于artists 值用[],表明是一个数组


private List artists;


然后直接定义内部类Artists


Gson解析嵌套json_第9张图片


所以这个bean类如下图:

Gson解析嵌套json_第10张图片


最后再生成get和set函数即可。


配合Gson使用:

Gson gson=new Gson();

Bean bean=gson.fromJson("要转化的String值",Bean.class);


这样就可以了。





代码下载地址:http://download.csdn.net/detail/u014290233/9588905  记得改类名和导入Gson、okhttp库。



你可能感兴趣的:(Android,json,Gson)