gson解析jsongson 复杂json对象适配器怎么写

Gson解析比较复杂的json数据_百度知道<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&Android:使用Gson解析复杂的JSON数据
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,目前广泛使用。本文主要讲解android如何解析复杂格式的JSON数据,适合android初学者和初步接触JSON的人。
1.JSON相关介绍:
首先了解一下JSON的相关内容,JSON中的数据是以键值对的形式出现的。例如&name&:&jack&;这就是一个键值对,可以理解为name=jack。JSON中很重要的两个概念就是数组(array)和对象(object),初学者们很容易会把这两个概念搞错。区分是数组还是对象最简单的办法就是看是在{ &&}(大括号中),还是在。Object在大括号中,数组在http://blog.csdn.net/u/article/details/中括号中。所有的JSON数据都是建立在数组和对象的基础上经过不同的组合而生成的。因此,可以说理解了数组和对象,就可以解析出各种复杂的JSON数据。
2.Android中使用Gson进行JSON解析。
Android解析JSON数据的方法有很多,例如:原生android的解析方法就是JSONObject和JSONArray,这样的解析有些繁琐。还有就是利用第三方的包,本文主要是使用Gson对JSON数据进行解析,当然还有FastJson,这个也很不错,大家可以试一试。
首先自然要GSON包了,这个网上有很多,我就不贴出连接了。下载完GSON包之后导入到项目中(project),就行了,如图:
这样就可以使用Gson包了。
3.如何使用GSON解析
解析JSON数据最重要的一步就是根据JSON数据构建出bean文件,这里一步一步教大家如何构建出bean文件。
JSON数据如下:
&showapi_res_code&:0,
&showapi_res_error&:&&,
&showapi_res_body&:{
&pagebean&:{
&allNum&:577,
&allPages&:29,
&contentlist&:[
&channelId&:&cdc86cf39001cd&,
&channelName&:&国内焦点&,
&desc&:&   中国警察网北京4月22日电中国共产党的优秀党员,公安部原部长、党委书记陶驷驹同志,因病医治无效,于日0时36分在北京逝世, 享年81岁。22日上午,陶驷驹同志遗体送别仪式在北京举行。  习近平、李克强、刘云山、张高丽、刘延东、李源潮、孟建柱、赵乐际、胡锦....&,
&imageurls&:[
&height&:480,
&url&:&/news/transform/Jb-fxrqhar9853560.jpg&,
&width&:400
&link&:&.cn/c/nd//doc-ifxrpvea1126476.shtml&,
&pubDate&:& 10:16:54&,
&source&:&新浪&,
&title&:&公安部原部长陶驷驹逝世 习近平胡锦涛等送花圈&
&channelId&:&cdc86cf39001cd&,
&channelName&:&国内焦点&,
&desc&:&   原标题:山东3县市购房补钱!继邹城、寿光后,即墨也加入资料图  日前,即墨市制定《关于促进房地产市场持续健康平稳发展的实施意见》,即墨市财政 将对购房者予以补贴。从《意见》出台之日起到今年年底前,在即墨首次购新建商品房的市民,每平米可领取补贴50到200元。对购....&,
&imageurls&:[
&height&:327,
&url&:&/mw690/77deaamk03mj20go093406.jpg&,
&width&:600
&link&:&.cn/c/nd//doc-ifxrpvea1122744.shtml&,
&pubDate&:& 07:52:13&,
&source&:&新浪&,
&title&:&山东3县市对购房者予以财政补贴&
&channelId&:&cdc86cf39001cd&,
&channelName&:&国内焦点&,
&desc&:&   原标题:首家商业火箭公司成立  京华时报讯(记者潘珊菊)昨天下午,记者从航天科工集团获悉,在成功发射首颗卫星&东方红一号&46年后,中国航天 技术步入&商用时代&,我国首家商业模式开展研发和应用的专业化火箭公司已于今年2月16日在武汉注册成立。  据介绍,该公....&,
&imageurls&:[
&link&:&.cn/o//doc-ifxrpvqz6479220.shtml&,
&pubDate&:& 03:19:35&,
&source&:&新浪&,
&title&:&中国首家商业火箭公司成立 注册时曾引官方争议&
&currentPage&:1,
&maxResult&:20
&ret_code&:0
一步一步来:
这是把所有的括号都收起来的样子
1展开大括号:
这是第一层,我们给一个标记为A。
2展开showapi_res_body后面的大括号:
这是第二层,我们给一个标记为B。
3展开pagebean后面的大括号:
这是第三层,我们给一个标记为C。
4展开contentlist后面的中括号,这是一个数组
这是第四层,我们给一个标记为D。
5展开contentlist里面的object中的大括号
这是第五层,我们给一个标记为E。
6展开imageurls的中括号
这是第六层,我们给一个标记为F
7展开imageurls里面object的大括号
这是第七层,我们给一个标记为G
到此,所有的括号全部展开,所有的结构也非常清晰。contentlist和imageurls是两个JSON数组而且数组的元素是JSON对象。
下面就开始构建bean文件了。
首先,建一个包 com.example.bean
包内放的就是bean文件。
如图A所示,第一层构建一个类:
1.我们构建一个java类HomeNewsBean
package com.example.bean.
public class HomeNewsBean {
private String showapi_res_
private String showapi_res_
private HomeNewsBeanBody showapi_res_
public String getShowapi_res_code() {
return showapi_res_
public void setShowapi_res_code(String showapi_res_code) {
this.showapi_res_code = showapi_res_
public String getShowapi_res_error() {
return showapi_res_
public void setShowapi_res_error(String showapi_res_error) {
this.showapi_res_error = showapi_res_
public HomeNewsBeanBody getShowapi_res_body() {
return showapi_res_
public void setShowapi_res_body(HomeNewsBeanBody showapi_res_body) {
this.showapi_res_body = showapi_res_
public String toString() {
return &HomeNewsBean [showapi_res_code=& + showapi_res_code
+ &, showapi_res_error=& + showapi_res_error
+ &, showapi_res_body=& + showapi_res_body + &]&;
2.类中HomeNewsBeanBody是第二层B中的类。
package com.example.bean.
public class HomeNewsBeanBody {
private HomeNewsPageB
private String ret_
public HomeNewsPageBean getPagebean() {
public void setPagebean(HomeNewsPageBean pagebean) {
this.pagebean =
public String getRet_code() {
return ret_
public void setRet_code(String ret_code) {
this.ret_code = ret_
public String toString() {
return &HomeNewsBeanBody [pagebean=& + pagebean + &, ret_code=&
+ ret_code + &]&;
3.类中HomeNewsPageBean是第三层C中的类
package com.example.bean.
import java.util.L
public class HomeNewsPageBean {
private String allN
private String allP
private String currentP
private String maxR
private List
public String getAllNum() {
return allN
public void setAllNum(String allNum) {
this.allNum = allN
public String getAllPages() {
return allP
public void setAllPages(String allPages) {
this.allPages = allP
public String getCurrentPage() {
return currentP
public void setCurrentPage(String currentPage) {
this.currentPage = currentP
public String getMaxResult() {
return maxR
public void setMaxResult(String maxResult) {
this.maxResult = maxR
public List getContentlist() {
public void setContentlist(List contentlist) {
this.contentlist =
public String toString() {
return &HomeNewsPageBean [allNum=& + allNum + &, allPages=& + allPages
+ &, currentPage=& + currentPage + &, maxResult=& + maxResult
+ &, contentlist=& + contentlist + &]&;
4.类中HomeNewsContentList是第和第四层D和第五层E中的类,这里注意:JSON数据中,这是数组,因此要使用List来存放。
package com.example.bean.
import java.util.L
public class HomeNewsContentList {
private String channelId;
private String channelN
private List
private String pubD
public String getChannelId() {
return channelId;
public void setChannelId(String channelId) {
this.channelId = channelId;
public String getChannelName() {
return channelN
public void setChannelName(String channelName) {
this.channelName = channelN
public String getDesc() {
public void setDesc(String desc) {
this.desc =
public List getImageurls() {
public void setImageurls(List imageurls) {
this.imageurls =
public String getLink() {
public void setLink(String link) {
this.link =
public String getPubDate() {
return pubD
public void setPubDate(String pubDate) {
this.pubDate = pubD
public String getSource() {
public void setSource(String source) {
this.source =
public String getTitle() {
public void setTitle(String title) {
this.title =
public String toString() {
return &HomeNewsContentList [channelId=& + channelId + &, channelName=&
+ channelName + &, desc=& + desc + &, imageurls=& + imageurls
+ &, link=& + link + &, pubDate=& + pubDate + &, source=&
+ source + &, title=& + title + &]&;
5.同理类中HomeNewsImages是第六层F和第七层G中的类,也是List存放。
package com.example.bean.
public class HomeNewsImages {
public String getHeight() {
public void setHeight(String height) {
this.height =
public String getUrl() {
public void setUrl(String url) {
this.url =
public String getWidth() {
public void setWidth(String width) {
this.width =
public String toString() {
return &HomeNewsImages [height=& + height + &, url=& + url + &, width=&
+ width + &]&;
到此为止,所有的bean文件全部构建完毕。
注意:所有的JSON数据的key:value键值对中的key要和bean文件中的对象一一对应,名字要完全一样!不然无法解析!!!
例如 这里面的
showapi_res_body要和JSON数据中的 一模一样。
接下来就是解析的过程了,最难的地方已经过去,接下来就是几行代码的事情了。
首先:传入URL,发送http请求,从服务器获取JSON数据。
public static String netLink(String URL) {
HttpClient httpClient = new DefaultHttpClient();
//访问指定的服务器
HttpGet httpGet = new HttpGet(URL);
HttpResponse httpResponse =
String response =
httpResponse = httpClient.execute(httpGet);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
if (httpResponse.getStatusLine().getStatusCode() == 200) {
//200说明请求和响应都是成功的
HttpEntity entity = httpResponse.getEntity();
response = EntityUtils.toString(entity,&utf-8&);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
返回的JSON数据在response中。然后,对返回的JSON进行解析。
Gson gson = new Gson();
HomeNewsBean homeNewsBean = gson.fromJson(response, HomeNewsBean.class);
两句话完成解析。
我把解析过程写成了一个函数
public static List parseJsonWithGson2(List newsLists,String jsonData){
Gson gson = new Gson();
HomeNewsBean homeNewsBean = gson.fromJson(jsonData, HomeNewsBean.class);
for(int i = 0;i
这样JSON数据就存在了List中。到此,解析结束。想要拿出数据只需调用newsLists.get()就可以了。
该文的JSON实例应该算比较复杂的JSON数据了,如果能掌握文中的复杂JSON解析,那么其他的复杂JSON数据解析应该没有问题。
最后,感谢,卖个萌o(&_&)o 哈哈!
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'&一& Google Gson 转换Json字符串和对象(对象中还有内嵌对象,Map,数组) - 推酷
&一& Google Gson 转换Json字符串和对象(对象中还有内嵌对象,Map,数组)
&&&& 可以直接执行如下类中的main方法将json字符串转换为相应对象后并打印出转换后的对象:
import java.util.L
import java.util.M
import com.google.gson.G
import com.google.gson.GsonB
* @author Josh Wang(Sheng)
public class JsonBean {
private List&B& // array
private Map&String, String&
public class B {
private String b1;
private String b2;
public String getB1() {
return b1;
public void setB1(String b1) {
this.b1 = b1;
public String getB2() {
return b2;
public void setB2(String b2) {
this.b2 = b2;
public class C {
public String c1;
public String c2;
public String getA() {
public void setA(String a) {
public List&B& getB() {
public void setB(List&B& b) {
public C getC() {
public void setC(C c) {
public Map&String, String& getD() {
public void setD(Map&String, String& d) {
public String toString() {
return &JsonBean [a=& + a + &, b=& + b.get(0).getB2() + &, c=& + c.c2 + &, d=& + d.get(&myKey&) +&]&;
public static void main(String[] args) {
String json = &{\&a\&:\&100\&,\&b\&:[{\&b1\&:\&b_value1\&,\&b2\&:\&b_value2\&},{\&b1\&:\&b_value1\&,\&b2\&:\&b_value2\&}],&
+ &\&c\&:{\&c1\&:\&c_value1\&,\&c2\&:\&c_value2\&}, \&d\&: {\&myKey\&:\&myValue\&} }&;
GsonBuilder builder = new GsonBuilder();
// builder.setDateFormat(DateUtils.MIDDLE_LINE_TIMESTAMP);
// builder.registerTypeAdapter(NucleonEventType.class, new NucleonEventTypeSerializer());
Gson gson = builder.create();
System.out.println(gson.fromJson(json, JsonBean.class));
执行结果为:
JsonBean [a=100, b=b_value2, c=c_value2, d=myValue]
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致查看: 571|回复: 4
Gson解析:这种Json的bean要怎么写?
该用户从未签到主题帖子e币
服务器返回一个json串,不是简单的,我想能不能通过正确书写JavaBean的方法,直接用Gson解析成JavaBean,如果能的话要怎么写呢?
{
& & &reason&: &查询成功&,
& & &result&: {
& && &&&&title&: &泰坦尼克号&,
& && &&&&tag&: &剧情 \/ 历史 \/ 爱情&,
& && &&&&act&: &莱昂纳多·迪卡普里奥 凯特·温丝莱特 比利·赞恩 凯西·贝茨 弗兰西丝·费舍 格劳瑞亚·斯图尔特 苏茜·爱米斯 比尔·帕克斯顿 伯纳德·希尔 维克多·加博 伊万·斯图尔特 詹姆斯·卡梅隆&,
& && &&&&year&: &1997&,
& && &&&&rating&: 9.1,
& && &&&&area&: &美国&,
& && &&&&dir&: &詹姆斯·卡梅隆&,
& && &&&&desc&: &日,号称 “世界工业史上的奇迹”的豪华客轮泰坦尼克号开始了自己的处女航,从英国的南安普顿出发驶往美国纽约。富家少女罗丝(凯特o温丝莱特)与母亲及未婚夫卡尔坐上了头等舱;另一边,放荡不羁的少年画家杰克(莱昂纳多·迪卡普里奥)也在码头的一场赌博中赢得了下等舱的船票。\r\n罗丝厌倦了上流社会虚伪的生活,不愿嫁给卡尔,打算投海自尽,被杰克救起。很快,美丽活泼的罗丝与英俊开朗的杰克相爱,杰克带罗丝参加下等舱的舞会、为她画像,二人的感情逐渐升温。\r\n日,星期天晚上,一个风平浪静的夜晚。泰坦尼克号撞上了冰山,“永不沉没的”泰坦尼克号面临沉船的命运,罗丝和杰克刚萌芽的爱情也将经历生死的考验。&,
& && &&&&cover&: &http:\/\/\/t01995eb1bddfa140df.jpg&,
& && &&&&vdo_status&: &play&,
& && &&&&playlinks&: {
& && && && &&youku&: &http:\/\/\/v_show\/id_XMTA2OTA5MTQw.html?tpa=dW5pb25faWQ9MTAyMjEzXzEwMDAwN18wMV8wMQ&
& && &&&},
& && &&&&video_rec&: [
& && && && &{
& && && && && & &cover&: &http:\/\/\/\/_230X306.jpg&,
& && && && && & &detail_url&: &http:\/\/\/m\/haLiZ0L2RHb4Sx.html&,
& && && && && & &title&: &西雅图夜未眠&
& && && && &},
& && && && &{
& && && && && & &cover&: &http:\/\/\/p1\/C.jpg_220x308.jpg&,
& && && && && & &detail_url&: &http:\/\/\/m\/g6bpYxH2QXb8Th.html&,
& && && && && & &title&: &西雅图未眠夜&
& && && && &},
& && && && &{
& && && && && & &cover&: &http:\/\/j.\/?u=http%3A%2F%2Fres.%2F050D0B0DCBD&m=cecee1&from=juhe&type=video&juid=JH969d5babd3adf9f4a82f00&d=pc&,
& && && && && & &detail_url&: &http:\/\/\/m\/hKrkY0T6Rnj5TR.html&,
& && && && && & &title&: &埃及艳后 美国版&
& && && && &},
& && && && &{
& && && && && & &cover&: &http:\/\/\/t014dce61b8f6e5ba71.jpg&,
& && && && && & &detail_url&: &http:\/\/\/m\/gqTjZUP6QXH5UB.html&,
& && && && && & &title&: &珍珠港&
& && && && &},
& && && && &{
& && && && && & &cover&: &http:\/\/\/t01af969feb.jpg&,
& && && && && & &detail_url&: &http:\/\/\/m\/hqrnakX7RHH1SB.html&,
& && && && && & &title&: &了不起的盖茨比&
& && && && &}
& && &&&],
& && &&&&act_s&: [
& && && && &{
& && && && && & &name&: &莱昂纳多·迪卡普里奥&,
& && && && && & &url&: &http:\/\/\/doc\/5267.html&,
& && && && && & &image&: &http:\/\/\/dmsmty\/120_110_100\/t0109ccd5c.jpg&
& && && && &},
& && && && &{
& && && && && & &name&: &凯特·温丝莱特&,
& && && && && & &url&: &http:\/\/\/doc\/6009.html&,
& && && && && & &image&: &http:\/\/\/dmsmty\/120_110_100\/te09b129.jpg&
& && && && &},
& && && && &{
& && && && && & &name&: &比利·赞恩&,
& && && && && & &url&: &http:\/\/\/doc\/3196.html&,
& && && && && & &image&: &http:\/\/\/dmsmty\/120_110_100\/t01d6eec54.jpg&
& && && && &}
& && &&&]
& & },
& & &error_code&: 0
}复制代码这个是我写的Bean,但似乎直接转换不过来...
public class SearchFilmResultBean {
& & private S //闪电侠第一季
& & private S//科幻/动作
& & private S//格兰特·古斯汀 埃涅·赫德森 汤姆·卡瓦纳夫
& & private S//2014
& & private S&&//7.8
& & private S//美国
& & private S//大卫·努特尔
& & private S//《闪电侠》精彩看点:二次元超级英雄再登电视荧屏...
& & private S///qqlive/img/jpgcache/files/qqvideo/0/0l01jm9yobh4xo4.jpg
& & private String vdo_//play
& & private List&playlinks&
& & private List&video_rec& video_
& & private List&act_s& act_s;
& & private String error_
& & public static class playlinks {
& && &&&private S
& && &&&private S
& && &&&private S
& && &&&private S
& && &&&private S
& && & /*此处省略setter getter*/
& & }
& & public static class video_rec {
& && &&&private String detail_
& && &&&private S
& && &&&private S
& && &&&/*此处省略setter getter*/
& & public static class act_s {
& && &&&private S
& && &&&private S
& && &&&private S
& && &&&/*此处省略setter getter*/
& & }
& &&&/*此处省略setter getter、toString*/
}
复制代码是我写的方法不对吗?还是不能直接转换?
用原生的JSONObject解一下试试
签到天数: 8 天连续签到: 1 天[LV.3]偶尔看看II主题帖子e币
用原生的JSONObject解一下试试
解决了。是我自己写错。。。&
该用户从未签到主题帖子e币
现在解决了。。。是我一个属性写错了(playlinks不是List).
该用户从未签到主题帖子e币
用原生的JSONObject解一下试试
解决了。是我自己写错。。。
签到天数: 85 天连续签到: 1 天[LV.6]常住居民II主题帖子e币
推荐阅读热门话题
620001872415415378324276275259255250224216210715
半小时前1&小时前1&小时前1&小时前2&小时前2&小时前3&小时前4&小时前4&小时前4&小时前4&小时前4&小时前4&小时前4&小时前5&小时前5&小时前
Powered by

我要回帖

更多关于 gson 复杂json 的文章

 

随机推荐