目前正在尝试着写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解析的更多相关文章

  1. iOS开发之JSON解析

    JSON解析步骤: - (NSArray *)products { if (_products == nil) { //第一步:获取JSON文件的路径: NSString *path = [[NSBu ...

  2. 安卓开发之json解析

    1.从网页获取json返回字符串 public class ReadNet extends AsyncTask<URL, Integer, String> { @Override      ...

  3. Android开发之Toast解析

    Toast是Android系统提供的一个显示消息提示的类,它的使用非常简单,用途很广,如软件的升级,可以用它进行提示:退出程序时,也可以用它进行提醒,输入限制的提醒,等等. 使用场景: 1.需要提示用 ...

  4. Android开发之JNI(一)--HelloWorld及遇到的错误解析

    Android开发之JNI(一)--HelloWorld及遇到的错误解析 1.NDK环境搭建    參考http://blog.csdn.net/xiaoliouc/article/details/8 ...

  5. Android开发之旅: Intents和Intent Filters(理论部分)

    引言 大部分移动设备平台上的应用程序都运行在他们自己的沙盒中.他们彼此之间互相隔离,并且严格限制应用程序与硬件和原始组件之间的交互. 我们知道交流是多么的重要,作为一个孤岛没有交流的东西,一定毫无意义 ...

  6. [置顶] Android开发之MediaPlayerService服务详解(一)

    前面一节我们分析了Binder通信相关的两个重要类:ProcessState 和 IPCThreadState.ProcessState负责打开Binder 驱动,每个进程只有一个.而 IPCThre ...

  7. Android 开发之旅:深入分析布局文件&又是“Hello World!”

    http://www.cnblogs.com/skynet/archive/2010/05/20/1740277.html 引言 上篇可以说是一个分水岭,它标志着我们从Android应用程序理论进入实 ...

  8. [置顶] Android开发之serviceManager分析

    Android 开发之serviceManager分析 在Android系统中用到最多的通信机制就是Binder,Binder主要由Client.Server.ServiceManager和Binde ...

  9. Android开发之TextView高级应用

    Android开发之TextView高级应用 我们平时使用TextView往往让它作为一个显示文字的容器,但TextView的功能并不局限于此.以下就和大家分享一下TextView的一些使用技巧. A ...

随机推荐

  1. js-shortid:优雅简洁地实现短ID

    短ID在实际运用中很广泛, 其中比较典型的运用就是短地址. 市面上肯定有不少开源的生成短ID库, 基于node.js的估计也不少. 鉴于本人已然是node.js的脑残粉(本职java开发), 很多业余 ...

  2. css 面试学习

    最经在学习前端的一些东西 转载于http://www.cnblogs.com/lei2007/archive/2013/08/16/3262897.html 雅虎的css前端的35条定律

  3. MySQL --slave-skip-errors

    官方说明: --slave-skip-errors=[err_code1,err_code2,...|all] (MySQL Cluster NDB 7.0.33 and later; MySQL C ...

  4. shell echo打印换行的方法

    echo要支持同C语言一样的\转义功能,只需要加上参数-e,如下所示: [~]#echo "Hello world.\nHello sea" Hello world.\nHello ...

  5. DemoExample

    <HTML> <HEAD> <TITLE>使用递归求解斐波那契数列</TITLE> </HEAD> <BODY> <?ph ...

  6. Cocos2dx隐藏iOS7状态栏】通过添加Plist Key隐藏iOS7状态栏

    本站文章均为李华明Himi原创,转载务必在明显处注明:(作者新浪微博:@李华明Himi)  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/%e9%9a% ...

  7. Python socket模拟HTTP请求

    0x00 起 最近在做一个对时间要求比较高的扫描器,需要封装一下SOCKET模拟HTTP发包的一些常用函数.简单的说,就是重写一下requests中的get.post方法. 今天在写的时候,遇到一枚很 ...

  8. 线形,柱形,条形数据表(百度Echart插件)

    [获取资源]进入官网,    http://echarts.baidu.com/导航,下载,下拉框下载,常用303k.就是这么简单,就个一个js.[项目使用]新建项目,MyChart具体使用的过程中, ...

  9. swift基础--数组、字典

    (1)初始化 (2)新增.修改.删除 (3)清空 (4)遍历 var array1 = ["x","y","z"] var array2:[ ...

  10. VS 2005部署应用程序提示“应用程序无法正常启动( 0x0150002)” 解决方案

    遇到这个问题,一定是缺少了CRT.MFC.ATL的DLL,不同版本的VS是不一样的.系统自带这些库的Release版,如果没有自带,打补丁就有了:系统不自带这些库的Debug版,所以Debug版的程序 ...