Android开发之json解析
目前正在尝试着写app,发现看懂代码和能写出来差距很大,最关键的是java基础比较的差,因为只会python,java基础只学习了一个礼拜就过了。感觉java写出来的代码不如python简单明了。
上面废话了。现在开发app肯定会涉及到与服务器的交互的,目前的首选是json。用到的解析json的包可以选择gson,fastjson等。
现在分析下把我难倒了好几天的一个bug,就是json的解析。
用到的API:http://fanyi.youdao.com/openapi.do?keyfrom=xxx&key=xxx&type=data&doctype=json&version=1.1&q=good
获得的json:
1 { 2 "translation": [ 3 "好" 4 ], 5 "basic": { 6 "us-phonetic": "ɡʊd", 7 "phonetic": "gʊd", 8 "uk-phonetic": "gʊd", 9 "explains": [ 10 "n. 好处;善行;慷慨的行为", 11 "adj. 好的;优良的;愉快的;虔诚的", 12 "adv. 好", 13 "n. (Good)人名;(英)古德;(瑞典)戈德" 14 ] 15 }, 16 "query": "good", 17 "errorCode": 0, 18 "web": [ 19 { 20 "value": [ 21 "好", 22 "商品", 23 "良好" 24 ], 25 "key": "Good" 26 }, 27 { 28 "value": [ 29 "耶稣受难节", 30 "耶稣受难日", 31 "受难节" 32 ], 33 "key": "Good Friday" 34 }, 35 { 36 "value": [ 37 "苏GOOD", 38 "妙极了", 39 "秀丝曼" 40 ], 41 "key": "So Good" 42 } 43 ] 44 }
通过观察json发现,既有大括号,又有中括号。
贴上一段python解析json的代码:
1 payload={'keyfrom':'flaskwechat','key':'658077913','type':'data','doctype':'json','version':'1.1','q':''} 2 payload['q']=content 3 url='http://fanyi.youdao.com/openapi.do' 4 r=requests.get(url,params=payload) 5 res=r.json() 6 if res['errorCode']==20: 7 return '要翻译的文本过长\n' 8 elif res['errorCode']==30: 9 return '无法进行有效的翻译\n' 10 elif res['errorCode']==40: 11 return '不支持的语言类型\n' 12 elif res['errorCode']==60: 13 return '无词典结果\n' 14 else: 15 inputKey=res['query']+'\n' 16 youdaoTranslation=u'---有道翻译---'+'\n'+res['translation'][0]+'\n' 17 x=u'---网络释义---'+'\n' 18 if res.has_key('basic'): 19 for i in res['basic'].keys(): 20 if i=='us-phonetic': 21 youdaoWeb=x+u'美式读法:'+res['basic'][i]+u'(Sorry,只有音标,真的没有语言)'+'\n' 22 elif i=='explains': 23 for a in res['basic'][i]: 24 youdaoWeb=x+'\n'+a+'\n'
res['translation'][0]就可以获取到'translation'的值,简单明了。
但是在android里面,gson解析的时候,需要先对象,列表的分清楚。
需要先写实体类,然后遇到了{},这个是对象,遇到了[],这个是数组,逐步解析
实体类需要与json的数据对应上。
遇到{},就对应类的实例;遇到[],就使用list;然后逐步的把数据解析出来。
直面挑战,躬身入局