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:
 {
     "translation": [
         "好"
     ],
     "basic": {
         "us-phonetic": "ɡʊd",
         "phonetic": "gʊd",
         "uk-phonetic": "gʊd",
         "explains": [
             "n. 好处;善行;慷慨的行为",
             "adj. 好的;优良的;愉快的;虔诚的",
             "adv. 好",
             "n. (Good)人名;(英)古德;(瑞典)戈德"
         ]
     },
     "query": "good",
     "errorCode": 0,
     "web": [
         {
             "value": [
                 "好",
                 "商品",
                 "良好"
             ],
             "key": "Good"
         },
         {
             "value": [
                 "耶稣受难节",
                 "耶稣受难日",
                 "受难节"
             ],
             "key": "Good Friday"
         },
         {
             "value": [
                 "苏GOOD",
                 "妙极了",
                 "秀丝曼"
             ],
             "key": "So Good"
         }
     ]
 }
通过观察json发现,既有大括号,又有中括号。
贴上一段python解析json的代码:
 payload={'keyfrom':'flaskwechat','key':'','type':'data','doctype':'json','version':'1.1','q':''}
     payload['q']=content
     url='http://fanyi.youdao.com/openapi.do'
     r=requests.get(url,params=payload)
     res=r.json()
     if res['errorCode']==20:
         return '要翻译的文本过长\n'
     elif res['errorCode']==30:
         return '无法进行有效的翻译\n'
     elif res['errorCode']==40:
         return '不支持的语言类型\n'
     elif res['errorCode']==60:
         return '无词典结果\n'
     else:
         inputKey=res['query']+'\n'
         youdaoTranslation=u'---有道翻译---'+'\n'+res['translation'][0]+'\n'
         x=u'---网络释义---'+'\n'
         if res.has_key('basic'):
             for i in res['basic'].keys():
                 if i=='us-phonetic':
                     youdaoWeb=x+u'美式读法:'+res['basic'][i]+u'(Sorry,只有音标,真的没有语言)'+'\n'
                 elif i=='explains':
                     for a in  res['basic'][i]:
                         youdaoWeb=x+'\n'+a+'\n'
res['translation'][0]就可以获取到'translation'的值,简单明了。
但是在android里面,gson解析的时候,需要先对象,列表的分清楚。
需要先写实体类,然后遇到了{},这个是对象,遇到了[],这个是数组,逐步解析
实体类需要与json的数据对应上。
遇到{},就对应类的实例;遇到[],就使用list;然后逐步的把数据解析出来。
Android开发之json解析的更多相关文章
- iOS开发之JSON解析
		JSON解析步骤: - (NSArray *)products { if (_products == nil) { //第一步:获取JSON文件的路径: NSString *path = [[NSBu ... 
- 安卓开发之json解析
		1.从网页获取json返回字符串 public class ReadNet extends AsyncTask<URL, Integer, String> { @Override ... 
- Android开发之Toast解析
		Toast是Android系统提供的一个显示消息提示的类,它的使用非常简单,用途很广,如软件的升级,可以用它进行提示:退出程序时,也可以用它进行提醒,输入限制的提醒,等等. 使用场景: 1.需要提示用 ... 
- Android开发之JNI(一)--HelloWorld及遇到的错误解析
		Android开发之JNI(一)--HelloWorld及遇到的错误解析 1.NDK环境搭建 參考http://blog.csdn.net/xiaoliouc/article/details/8 ... 
- Android开发之旅: Intents和Intent Filters(理论部分)
		引言 大部分移动设备平台上的应用程序都运行在他们自己的沙盒中.他们彼此之间互相隔离,并且严格限制应用程序与硬件和原始组件之间的交互. 我们知道交流是多么的重要,作为一个孤岛没有交流的东西,一定毫无意义 ... 
- [置顶] Android开发之MediaPlayerService服务详解(一)
		前面一节我们分析了Binder通信相关的两个重要类:ProcessState 和 IPCThreadState.ProcessState负责打开Binder 驱动,每个进程只有一个.而 IPCThre ... 
- Android 开发之旅:深入分析布局文件&又是“Hello World!”
		http://www.cnblogs.com/skynet/archive/2010/05/20/1740277.html 引言 上篇可以说是一个分水岭,它标志着我们从Android应用程序理论进入实 ... 
- [置顶] Android开发之serviceManager分析
		Android 开发之serviceManager分析 在Android系统中用到最多的通信机制就是Binder,Binder主要由Client.Server.ServiceManager和Binde ... 
- Android开发之TextView高级应用
		Android开发之TextView高级应用 我们平时使用TextView往往让它作为一个显示文字的容器,但TextView的功能并不局限于此.以下就和大家分享一下TextView的一些使用技巧. A ... 
随机推荐
- coreseek安装使用
			本文引自:http://www.phperz.com/article/14/0615/95.html sphinx的安装使用,其实都是大同小异,以下以 coreseek安装为例Coreseek 是一款 ... 
- [DevExpress]GridControl之CustomColumnDisplayText Helper
			在实际开发中,有时候需要对GridControl中列值进行转义,譬如1转义成完成等等,一般在诸如CustomColumnDisplayText事件中能够轻松完成,为了提高代码复用性,所以对Custom ... 
- laravel--模型中各种属性详解
			首先以这个模型为例 首先看, 1.$guarded属性,$fillable属性 $guarded属性一般是和$fillable对应的,不是一起存在但是互相使用,他们都是laravel的批量赋值方法cr ... 
- 1043. Is It a Binary Search Tree
			http://www.patest.cn/contests/pat-a-practise/1043 #include <stdio.h> #include <vector> u ... 
- Keil V5.1x命令“Build Target”重新编译所有文件
			网上的解决办法有多种,但不知道哪一种能对症,以下是我的解决方法: 
- (转)关于ARM9协处理器CP15及MCR和MRC指令
			网址:http://blog.csdn.net/zhou1232006/article/details/6150198 在基于ARM的嵌入式应用系统中,存储系统通常是通过系统控制协处理器CP15完成的 ... 
- 严重: The web application [] appears to have started a thread named [Abandoned connection cleanup thread] but has failed to stop it.
			今日在重新部署项目时出现此问题,虽然对项目无影响,但问题就是问题.完整信息如下(使用idea工具): 十二月 05, 2015 11:44:27 上午 org.apache.catalina.star ... 
- linux命令useradd添加用户详解
			1.作用 useradd或adduser命令用来建立用户帐号和创建用户的起始目录,使用权限是超级用户. 2.格式 useradd [-d home] [-s shell] [-c comment] [ ... 
- [转载]iframe跨域
			最近做的一个项目中需要ajax跨域取得数据,如果是在本域中确实没有问题,但是放到二级域和其他域下浏览器直接就弹出提示框:“该页正在访问其控制范围之外的数据,这有些危险,是否继续" 1.什么引 ... 
- hdu 3682
			将每个格子标记为 x*n*n+y*n+z 每个格子会有一个独特的编号 将它放入vector中 去重 我一开始用 set 超时 #include <cstdio> #include ... 
