在安卓中解析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

最新文章

  1. JS核心系列:理解 new 的运行机制
  2. 004-For与Function进阶实战、Lazy的使用
  3. ubuntu14 opencv python 安装
  4. namesilo域名注册教程
  5. codevs3305 水果姐逛水果街Ⅱ
  6. hdu1232 并查集
  7. js数组常用操作方法小结(增加,删除,合并,分割等)
  8. BIP_开发案例03_将原有Report Builer报表全部转为XML Publisher形式(案例)
  9. 单引号、双引号 Html转义符 ----2014年12月2日
  10. 【Hybrid App】Hybrid App开发 四大主流移平台分析
  11. Docker学习笔记 - Docker的远程访问
  12. Eureka服务下线后快速感知配置
  13. Delphi ClientDataSet 主从结构 BUG
  14. H5 video播放视频遇到的问题
  15. Power BI数据网关
  16. python程序编写中常见错误
  17. 关于less在DW中高亮显示问题
  18. java中Cookie使用问题(message:invalid character [32] was present in the Cookie value)
  19. 希尔排序算法-python实现
  20. bzoj 1116

热门文章

  1. HttpWebRequest 请求数据
  2. vs2010编辑器中找不到System.Web.Extensions.dll
  3. android studio 华为手机看不到具体的错误日志
  4. java线程池初步理解
  5. iOS开发-二维码的基本使用
  6. PYTHON学习之路_PYTHON基础(1)
  7. java调用Linux命令报错:java.io.IOException: Cannot run program &quot;ps&quot;: CreateProcess error=2, ?????????
  8. 在ubuntu上配置nginx+php+mysql+phpmyadmin
  9. RHEL6.5及Win7的和谐共处(投机版)
  10. iBeacon行为分析