標籤:
目前正在嘗試著寫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解析的時候,需要先對象,列表的分清楚。
需要先寫實體類,然後遇到了{},這個是對象,遇到了[],這個是數組,逐步解析
Android開發之json解析