首先说明一点, json 格式的数据如果用 { } 包含的是一个对象,用 [ ] 包含的是一个数据
示例接口
https://api.douban.com/v2/movie/top250?start=0&count=2
访问后得到如下的数据
{
"count": 2,
"start": 0,
"total": 250,
"subjects": [
{
"rating": {
"max": 10,
"average": 9.6,
"stars": "50",
"min": 0
},
"genres": [
"犯罪",
"剧情"
],
"title": "肖申克的救赎",
"casts": [
{
"alt": "https://movie.douban.com/celebrity/1054521/",
"avatars": {
"small": "https://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p17525.webp",
"large": "https://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p17525.webp",
"medium": "https://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p17525.webp"
},
"name": "蒂姆·罗宾斯",
"id": "1054521"
},
{
"alt": "https://movie.douban.com/celebrity/1054534/",
"avatars": {
"small": "https://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p34642.webp",
"large": "https://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p34642.webp",
"medium": "https://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p34642.webp"
},
"name": "摩根·弗里曼",
"id": "1054534"
},
{
"alt": "https://movie.douban.com/celebrity/1041179/",
"avatars": {
"small": "https://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p5837.webp",
"large": "https://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p5837.webp",
"medium": "https://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p5837.webp"
},
"name": "鲍勃·冈顿",
"id": "1041179"
}
],
"collect_count": 1300722,
"original_title": "The Shawshank Redemption",
"subtype": "movie",
"directors": [
{
"alt": "https://movie.douban.com/celebrity/1047973/",
"avatars": {
"small": "https://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p230.webp",
"large": "https://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p230.webp",
"medium": "https://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p230.webp"
},
"name": "弗兰克·德拉邦特",
"id": "1047973"
}
],
"year": "1994",
"images": {
"small": "https://img3.doubanio.com/view/photo/s_ratio_poster/public/p480747492.webp",
"large": "https://img3.doubanio.com/view/photo/s_ratio_poster/public/p480747492.webp",
"medium": "https://img3.doubanio.com/view/photo/s_ratio_poster/public/p480747492.webp"
},
"alt": "https://movie.douban.com/subject/1292052/",
"id": "1292052"
},
{
"rating": {
"max": 10,
"average": 9.5,
"stars": "50",
"min": 0
},
"genres": [
"剧情",
"爱情",
"同性"
],
"title": "霸王别姬",
"casts": [
{
"alt": "https://movie.douban.com/celebrity/1003494/",
"avatars": {
"small": "https://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p67.webp",
"large": "https://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p67.webp",
"medium": "https://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p67.webp"
},
"name": "张国荣",
"id": "1003494"
},
{
"alt": "https://movie.douban.com/celebrity/1050265/",
"avatars": {
"small": "https://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1391771959.66.webp",
"large": "https://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1391771959.66.webp",
"medium": "https://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1391771959.66.webp"
},
"name": "张丰毅",
"id": "1050265"
},
{
"alt": "https://movie.douban.com/celebrity/1035641/",
"avatars": {
"small": "https://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1399268395.47.webp",
"large": "https://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1399268395.47.webp",
"medium": "https://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1399268395.47.webp"
},
"name": "巩俐",
"id": "1035641"
}
],
"collect_count": 939597,
"original_title": "霸王别姬",
"subtype": "movie",
"directors": [
{
"alt": "https://movie.douban.com/celebrity/1023040/",
"avatars": {
"small": "https://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1451727734.81.webp",
"large": "https://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1451727734.81.webp",
"medium": "https://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1451727734.81.webp"
},
"name": "陈凯歌",
"id": "1023040"
}
],
"year": "1993",
"images": {
"small": "https://img3.doubanio.com/view/photo/s_ratio_poster/public/p1910813120.webp",
"large": "https://img3.doubanio.com/view/photo/s_ratio_poster/public/p1910813120.webp",
"medium": "https://img3.doubanio.com/view/photo/s_ratio_poster/public/p1910813120.webp"
},
"alt": "https://movie.douban.com/subject/1291546/",
"id": "1291546"
}
],
"title": "豆瓣电影Top250"
}
1、安卓原生解析
api自带JSONObject
try { JSONObject jsonObject = new JSONObject(jsonStr);//jsonStr为返回的字符串 int count= jsonObject.getInt("count");//解出count int total= jsonObject.getInt("total");//解出total String title= jsonObject.getString("title");//解出title JSONArray subjects=jsonObject.getJSONArray("subjects"); for (int i = 0; i <subjects.length() ; i++) {//循环解出数组中的每个对象,这里只解了第一个,后面都是相同的解法 JSONObject sub=(JSONObject) subjects.get(0);//subjects数组的第一个对象sub JSONObject rating=sub.getJSONObject("rating");//sub中的对象rating int max=rating.getInt("max");//rating中的max JSONArray genres=sub.getJSONArray("genres");//sub中的数组genres String genresStr=genres.getString(0);//genres中的第一个值,如果要全解出来加一个for循环取值 } } catch (JSONException e) { e.printStackTrace(); }
Google gson包的JsonObject解析
JsonObject obj = (JsonObject) new JsonParser().parse(jsonStr); int count = obj.get("count").getAsInt(); int total = obj.get("total").getAsInt(); String title = obj.get("title").getAsString(); JsonArray subjects = obj.getAsJsonArray("subjects"); for (int i = 0; i < subjects.size(); i++) {//循环解出数组中的每个对象,这里只解了第一个,后面都是相同的解法 JsonObject sub = (JsonObject) subjects.get(0);//subjects数组的第一个对象sub JsonObject rating = sub.getAsJsonObject("rating");//sub中的对象rating int max = rating.get("max").getAsInt();//rating中的max JsonArray genres = sub.getAsJsonArray("genres");//sub中的数组genres String genres1 = genres.get(0).getAsString();//genres中的第一个值,如果要全解出来加一个for循环取值 }
2、Gson解析
找到这个build文件并打开,加入依赖 compile 'com.google.code.gson:gson:2.7'
这里强烈推荐安装插件GsonFormat (Android Studio安装此插件步骤自行百度)
这个插件是生成实体类的,新建一个类,然后按快捷键alt+s
将请求到的数据粘贴进去,点击OK,这样对应的实体类就生成了,然后直接获取数据
Type type = new TypeToken<TestBean>() {}.getType();//TestBean为实体类名字 TestBean testBean = new Gson().fromJson(jsonStr, type);//jsonStr为返回的字符串 int count = testBean.getCount(); int total = testBean.getTotal(); for (int i = 0; i < testBean.getSubjects().size(); i++) { TestBean.SubjectsBean subject = testBean.getSubjects().get(0);//循环取出后面写.get(i),这里示例取第一个 int max = subject.getRating().getMax();//取出max的值 for (int j = 0; j < subject.getGenres().size(); j++) { String genre = subject.getGenres().get(0);//循环取出后面写.get(i),这里示例取第一个 } }