在安卓中解析JSON串可以使用的方法有很多,比如说用官方提供的JSONObject或者谷歌提供的开源库GSON,以及一些第三方开源库。

这里用的是GSON,为了测试方便,借助了一个百度的api,一个图片识别的api,向服务器请求之后,服务器会返回一个JSON串来描述图片识别的结果,我们要做的是解析这个JSON获得里面的数据,并且书出来。

这里是图片

接下来是使用api,这里不解释,因为也不是重点,贴一下代码

 String httpUrl = "http://apis.baidu.com/idl_baidu/baiduocrpay/idlocrpaid";
Base64 base64 = new Base64();
String httpArg = URLEncoder.encode(base64
.encode(getBytes("c://IMG_20151230_205532.jpg")));
5 httpArg = "fromdevice=pc&clientip=10.10.10.0&detecttype=LocateRecognize&languagetype=CHN_ENG&imagetype=1&image="
+ httpArg;
String jsonResult = request(httpUrl, httpArg);
System.out.println(jsonResult);

返回的JSON串为

{"errNum":"0","errMsg":"success","querySign":"4053545886,2545695729","retData":[{"rect":{"left":"35","top":"18","width":"432","height":"114"},"word":" Android"},{"rect":{"left":"31","top":"174","width":"373","height":"108"},"word":"0626"}]}

然后这里要用到GSON来解析它,使用到GSON的包为

接下来,分析我们获取回来的,在这里可以看到,这个串返回是一个单独的串,而不是一个数组,因此我们就要建立一个类,用来映射这个串的内容,因为这个串里面的retData是一个数组,所以在对应的类里面应该有一个List来放这个数组的数据,然后在ratDate中有一个rect里面有4个定位和大小的对应值,所以,这里要构造三个类,用于映射,如下:

 public class Response {
private String errNum;
private String errMsg;
private String querySign;
private List<RetData> retData; public String getErrNum() {
return errNum;
} public void setErrNum(String errNum) {
this.errNum = errNum;
} public String getErrMsg() {
return errMsg;
} public void setErrMsg(String errMsg) {
this.errMsg = errMsg;
} public String getQuerySign() {
return querySign;
} public void setQuerySign(String querySign) {
this.querySign = querySign;
} public List<RetData> getRetData() {
return retData;
} public void setRetData(List<RetData> retData) {
this.retData = retData;
} }
 public class RetData {
private Rect rect;
private String word; public Rect getRect() {
return rect;
} public void setRect(Rect rect) {
this.rect = rect;
} public String getWord() {
return word;
} public void setWord(String word) {
this.word = word;
} }
 public class Rect {
private String left;
private String top;
private String width;
private String height; public String getLeft() {
return left;
} public void setLeft(String left) {
this.left = left;
} public String getTop() {
return top;
} public void setTop(String top) {
this.top = top;
} public String getWidth() {
return width;
} public void setWidth(String width) {
this.width = width;
} public String getHeight() {
return height;
} public void setHeight(String height) {
this.height = height;
} }

接收类定义好了以后,可以开始用GSON来映射,方法非常简单,新建一个Gson的对象,然后调用fromJson方法让Gson完成映射

 Gson gson = new Gson();
Response response = gson.fromJson(jsonResult, Response.class);
for (int i = 0; i < response.getRetData().size(); i++) {
Rect rect = response.getRetData().get(i).getRect();
System.out.println("识别出字符的位置为:left=" + rect.getLeft() + " top="
+ rect.getTop() + " height=" + rect.getHeight() + " width="
+ rect.getWidth());
System.out.println("识别出的字符为:"
+ response.getRetData().get(i).getWord());
}

结果显示:

识别出字符的位置为:left=35 top=18 height=114 width=432
识别出的字符为: Android
识别出字符的位置为:left=31 top=174 height=108 width=373
识别出的字符为:0626

Android开发学习之路-GSON使用心得(OCR图片识别)的更多相关文章

  1. Android开发学习之路-SnackBar使用心得

    SnackBar是DesignSupportLibrary中的一个重要的控件,用于在界面下面提示一些关键信息,跟Toast不同的地方是SnackBar允许用户向右滑动消除它,同时,也允许在SnackB ...

  2. Android开发学习之路--网络编程之xml、json

    一般网络数据通过http来get,post,那么其中的数据不可能杂乱无章,比如我要post一段数据,肯定是要有一定的格式,协议的.常用的就是xml和json了.在此先要搭建个简单的服务器吧,首先呢下载 ...

  3. Android开发学习之路-RecyclerView滑动删除和拖动排序

    Android开发学习之路-RecyclerView使用初探 Android开发学习之路-RecyclerView的Item自定义动画及DefaultItemAnimator源码分析 Android开 ...

  4. Android开发学习之路--基于vitamio的视频播放器(二)

      终于把该忙的事情都忙得差不多了,接下来又可以开始good good study,day day up了.在Android开发学习之路–基于vitamio的视频播放器(一)中,主要讲了播放器的界面的 ...

  5. Android开发学习之路--Android Studio cmake编译ffmpeg

      最新的android studio2.2引入了cmake可以很好地实现ndk的编写.这里使用最新的方式,对于以前的android下的ndk编译什么的可以参考之前的文章:Android开发学习之路– ...

  6. Android开发学习之路--Activity之初体验

    环境也搭建好了,android系统也基本了解了,那么接下来就可以开始学习android开发了,相信这么学下去肯定可以把android开发学习好的,再加上时而再温故下linux下的知识,看看androi ...

  7. Android开发学习之路--Android系统架构初探

    环境搭建好了,最简单的app也运行过了,那么app到底是怎么运行在手机上的,手机又到底怎么能运行这些应用,一堆的电子元器件最后可以运行这么美妙的界面,在此还是需要好好研究研究.这里从芯片及硬件模块-& ...

  8. Android开发学习之路--MAC下Android Studio开发环境搭建

    自从毕业开始到现在还没有系统地学习android应用的开发,之前一直都是做些底层的驱动,以及linux上的c开发.虽然写过几个简单的app,也对android4.0.3的源代码做过部分的分析,也算入门 ...

  9. Android开发学习之路-记一次CSDN公开课

    今天的CSDN公开课Android事件处理重难点快速掌握中老师讲到一个概念我觉得不正确. 原话是这样的:点击事件可以通过事件监听和回调两种方法实现. 我一听到之后我的表情是这样的: 这跟我学的看的都不 ...

随机推荐

  1. 2016某知名互联网公司PHP面试题及答案

    1 字符串"\r","\n","\t","\x20"分别代表什么 答案: "\r"代表的含义是: 在 ...

  2. Linux下连接MSSQL之安装FreeTDS

    $ tsql -H MSSQL服务器服务IP -p 1433 -U MSSQL服务器登陆帐号 -P MSSQL服务器登陆密码http://www.cnblogs.com/ilovexiao/p/355 ...

  3. json_encode中文unicode的问题

    近期做微信卡券开发遇到一个问题,创建卡券post数据给服务器时返回data format error, do NOT use json unicode encode (/uxxxx/uxxxx), p ...

  4. reporting services rdl文件如何不分页

    进入rdl文件中的xml内容,找到<page></page>标签,在该标签中,添加如下属性, <InteractiveHeight>0in</Interact ...

  5. WCF android调用

    http://www.cnblogs.com/cg6811568/archive/2013/05/23/3095119.html

  6. tar.xz文件解压

    原文:http://blog.csdn.net/rheostat/article/details/7614451 感谢CSDN的<帝都码农> ======================= ...

  7. iOS下控件坐标的转换方法

    转换方法如下: - (CGPoint)convertPoint:(CGPoint)point fromView:(UIView *)view - (CGPoint)convertPoint:(CGPo ...

  8. foremost

    foremost 恢复单个类型文件 删除一个 USB(/dev/sdba1)存储器中一个 png 文件然后使用 formost 恢复. #rm -f /dev/sdb1/1.png #foremost ...

  9. 读入一个c程序,并按字母表顺序分组打印变量名,每组前N个字符相同(TCPL 练习6-2)

    在建立结构tnode的过程中,我们没有预设门槛.这道题目就设置了门槛,必须根据前N个字符来进行分组,于是排除了长度小于N的变量,以便减轻负担. 因为要求对变量名分组打印,组别理所应当地应该按照至少是升 ...

  10. 2013-09-22 [随笔]-Roy

    不能因为一些小事情而一直影响自己的心情. 每天过得都应该有重点,无论是家庭还是工作还是其他. 要多花时间去吸取些新东西,看书,丰富自己的想法. 不能让日常的乱七八糟影响心情. bingo!