他奶奶的,抱歉,不好意思,都要骂娘了。也许是自己第一次用第三方json解析库没啥经验吧,之前都是自己用官方提供的json api 来进行json解析,这次用了下阿里的fastjson,据说比Gson,快6倍,结果就在一个小坑里面折腾了一上午,在写与实体类对应的实体类时注意,实体类的名字一定要与服务器json数据的键的名字相同,否则得到的数据为空,刚开始自己也还在思考,这么多字段,fastjso是怎么正确对应起来的,结果也没多深入思考,在写实体类变量时,前两个都自己起的名字,剩下的才用的服务器名字。结果最后前两个死活为空,最后通过调试才发现只有前两个为空,其他不为空,然后去看前两个有什么特殊的地方,结果发现就只有前两个的实体类变量名字与服务器名字不同。然后立马改过来,一起ok了,终于从坑里爬出来了。
顺便说下,fastjson真的是非常好用。现将使用方式记录一下,已备后用。
首先下载fastjson包,地址:https://github.com/alibaba/fastjson/wiki/Android%E7%89%88%E6%9C%AC
我下载的最新版本1.1.43.点进去,注意去下载红线那个jar包
之前自己下了androidsource那个jar包,一直提示找不到类。
将jar包放在android studio的libs文件夹下然后就可以使用了。
我的服务器json数据为
{"totalItems":4320,"items":[{"title":"【福利集锦TOP7】小苍教你免费拿皮肤!","cover":"http://img.plures.net/4601/0414/73cf/2055/da9c/7c2a/e680/f3ee.png","timeSpan":0,"createTime":"2015-05-11T13:15:29","roomId":307021,"domain":"545883","roomName":"小苍MM","totalViews":0,"recentViews":0,"gameId":"4","gameName":"英雄联盟","tags":"逆风翻盘 精彩集锦 大神来袭 完美团战 极限反杀 第一视角 神级意识 细节成败 休闲娱乐 发条魔灵 皮城女警 赵信 德玛西亚皇子 WE 小米 伊泽瑞尔 速成宝典 卡尔玛 盖伦 贾克斯 辅助 乌迪尔 上单 流浪法师 虚空行者 卡萨丁 中单 审判天使 打野 盲僧 小于 暮光之眼 瘟疫之源 光辉女郎 拉克丝 天启者 亡灵勇士 皇族 琴瑟仙女 宝石骑士 牛头酋长 不祥之刃 卡特琳娜 卡牌大师 崔斯特 齐天大圣 黑暗之女 安妮 刀锋之影 法外狂徒 曙光女神 狂野女猎手 薇恩 波比 嘉文四世 凯尔 酒桶 德邦总管 李青 提莫 无极剑圣 德玛西亚之力 蛮族之王 战争之王 寒冰射手 英勇投弹手 虚空恐惧 暗影之拳 寡妇制造者 荒漠屠夫 放逐之刃 邪恶小法师 米勒 精彩镜头 嗜血猎手 潘森 瑞兹 赏金猎人 厄运小姐 伊芙琳 影流之主 无状态 戴尔 小苍 最强王者 UZI 小智 锐雯 排位赛 EP 官方视频 撸时代 Moments精彩时刻 攻略分享 精彩花絮 每周TOP10 精彩对战 诅咒巨魔 天策大魔王 暴走集锦","score":39.58333,"mediaSource":2,"id":106374},{"title":"英雄联盟lol小苍免费教学五杀逆翻盘小学生必看最新精彩视频","cover":"http://img.plures.net/d67a/b94b/9c48/11f3/3193/fbac/c57b/a9aa.jpg","timeSpan":396,"createTime":"2015-05-11T12:33:46","roomId":281497,"domain":"517821","roomName":"小苍推荐大神免费教学视频","tags":"逆风翻盘 大神来袭 坑爹集锦 完美团战 极限反杀 第一视角 神级意识 TOP系列 细节成败 赵信 SKY解说 若风 小米 坑爹宝典 上单 OMG 中单 打野 小于 光辉女郎 苏小妍 皇族 新地图 TSM 九尾妖狐 美服 战争之王 米勒 精彩镜头 决赛 潘森 新英雄 JY 无状态 LGD VG 施洛因 戴尔 小苍 PE 搞笑视频 最强王者 UZI 神探苍 小智 韩服 倾城 JITP JoKer SKT 排位赛 FNC EP 官方视频 赛事 Moments精彩时刻 精彩五杀 新皮肤 啦啦啦德玛西亚 克隆模式 神探苍英雄百科 MISS EDG TGA大奖赛2013冬季总决赛 TGA大奖赛2013夏季总决赛 小楼酱 TT的小黑屋 淘汰赛 小组赛 枪炮玫瑰 white 小漠· Miss排位日记 S4精品节目 S4精彩集锦 2014全球总决赛 LOL每日集锦 2015LPL春季赛 2015LPL春季赛比赛视频 2015LPL春季赛每日最佳 2015LPL春季赛精彩集锦 暴走集锦 TGA一周新闻 DreamCatcher IG.Y LXH 加州宫馆.MY EPHK H2K WFX ADG 栏目 TGA一周星闻 20150508 20150509 20150510 20150511 MSI季中邀请赛 BJK AHQ","score":39.583324,"id":106370}]}然后我的尸实体类
LiveVideoInfo.java
public class LiveVideoInfo { String title; String cover; int timeSpan; String createTime; int roomId; String domain; String roomName; int totalViews; int recentViews; public void setTitle(String title) { this.title = title; } public void setCover(String cover) { this.cover = cover; } String gameId; public String getTitle() { return title; } public String getCover() { return cover; } String gameName; String tags; int score; int mediaSource; int id; public String getTags() { return tags; } public void setTags(String tags) { this.tags = tags; } public void setTimeSpan(int timeSpan) { this.timeSpan = timeSpan; } public void setCreateTime(String createTime) { this.createTime = createTime; } public void setRoomId(int roomId) { this.roomId = roomId; } public void setDomain(String domain) { this.domain = domain; } public void setRoomName(String roomName) { this.roomName = roomName; } public void setTotalViews(int totalViews) { this.totalViews = totalViews; } public void setRecentViews(int recentViews) { this.recentViews = recentViews; } public void setGameId(String gameId) { this.gameId = gameId; } public void setGameName(String gameName) { this.gameName = gameName; } public void setscore(int score) { this.score = score; } public void setMediaSource(int mediaSource) { this.mediaSource = mediaSource; } public void setId(int id) { this.id = id; } public int getTimeSpan() { return timeSpan; } public String getCreateTime() { return createTime; } public int getRoomId() { return roomId; } public String getDomain() { return domain; } public String getRoomName() { return roomName; } public int getTotalViews() { return totalViews; } public int getRecentViews() { return recentViews; } public String getGameId() { return gameId; } public String getGameName() { return gameName; } public int getscore() { return score; } public int getMediaSource() { return mediaSource; } public int getId() { return id; } }LiveVideoInfoGroup.java
public class LiveVideoInfoGroup { List<LiveVideoInfo> items=new ArrayList<LiveVideoInfo>(); int totalItems; public List<LiveVideoInfo> getItems() { return items; } public int getTotalItems() { return totalItems; } public void setItems(List<LiveVideoInfo> items) { this.items = items; } public void setTotalItems(int totalItems) { this.totalItems = totalItems; } }然后再在json解析的地方调用下面这句:
LiveVideoInfoGroup group=JSON.parSEObject(content,LiveVideoInfoGroup.class);服务器上的json数据就都对应到你的实体类中去了。注意实体类变量名字与服务器中键值保持一样。
是不是so easy。对于超大json文本,解决办法:官方链接:https://github.com/alibaba/fastjson/wiki/Stream-api
原文链接:https://www.f2er.com/json/289796.html