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 ...
随机推荐
- WCF 宿主与通信模式(二)
宿主 每个WCF服务都必须托管在Windows进程中,该进程称为宿主进程(host process) 单个宿主进程可以托管多个服务,相同的服务类型也可以托管在多个宿主进程中. wcf中托管服务一般有一 ...
- php入门常量
常量像变量一样,用于临时存储一个值,但是常量在许多方面与变量不同. 常量:1.是在程序执行期间无法改变数据,常量的作用域是全局的.2.常量的命名与与变量相似,只是不带美元符号“$”.一个有效的常量名由 ...
- 生成XML文件,通过实体生成XML文件
实体 using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Xm ...
- 【BZOJ 1088】 [SCOI2005]扫雷Mine
Description 相信大家都玩过扫雷的游戏.那是在一个n*m的矩阵里面有一些雷,要你根据一些信息找出雷来.万圣节到了,“余”人国流行起了一种简单的扫雷游戏,这个游戏规则和扫雷一样,如果某个格子没 ...
- 【BZOJ 3172】 [Tjoi2013]单词
Description 某人读论文,一篇论文是由许多单词组成.但他发现一个单词会在论文中出现很多次,现在想知道每个单词分别在论文中出现多少次. Input 第一个一个整数N,表示有多少个单词,接下来N ...
- 关于安装Android Studio的一些问题的解决方法
问题1:每次Fetching android sdk component information 这是在检查你的 Android SDK .有人会在这里卡上很长时间,很大的原因就是:网络连接有问题.可 ...
- Hibernate - SQLQuery
使用SQLQuery 对原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行Session.createSQLQuery()获取这个接口.下面来描述如何使用这个API进行查询. 标量查询 ...
- Maven 执行Javadoc时控制台输出乱码问题
1.0 Maven 执行Javadoc时控制台输出乱码问题 问题描述 最近项目中使用maven-javadoc-plugin生成javadoc时,myEclipse控制台乱码. 插件配置 问题分析 ...
- [转载]Eziriz .NET Reactor 4.7.0.0 官方原版+破解补丁(强大的代码保护和软件防盗版工具)
Eziriz .NET Reactor 是一个强大的代码保护和软件防盗版工具,完全由.NET框架编写..NET Reactor支持NET平台的软件许可系统,并支持NET程序集所有语言.当.Net编译器 ...
- <转>struts2中Convention中的basePackage与locators配置种种
用了Convention插件来实现所谓的0配置, 1. struts.convention.package.locators.basePackage=com.ZTest.web.action 这个属性 ...