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 '要翻译的文本过长
'
 8     elif res['errorCode']==30:
 9         return '无法进行有效的翻译
'
10     elif res['errorCode']==40:
11         return '不支持的语言类型
'
12     elif res['errorCode']==60:
13         return '无词典结果
'
14     else:
15         inputKey=res['query']+'
'
16         youdaoTranslation=u'---有道翻译---'+'
'+res['translation'][0]+'
'
17         x=u'---网络释义---'+'
'
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,只有音标,真的没有语言)'+'
'
22                 elif i=='explains':
23                     for a in  res['basic'][i]:
24                         youdaoWeb=x+'
'+a+'
'
res['translation'][0]就可以获取到'translation'的值,简单明了。
但是在android里面,gson解析的时候,需要先对象,列表的分清楚。
需要先写实体类,然后遇到了{},这个是对象,遇到了[],这个是数组,逐步解析
实体类需要与json的数据对应上。
遇到{},就对应类的实例;遇到[],就使用list;然后逐步的把数据解析出来。


原文地址:https://www.cnblogs.com/liyiran/p/4587271.html