接上文

七、通过JSONTokener来解析json文本
7.1、将json文本解析为对象
我们可以通过JSONTokener的nextValue()来获得JSONObject对象,然后再通过JSONObject对象来做进一步的解析。
实例4
void startJSONTokenerDemo(){
final String JSON =
"{" +
" \"phone\" : [\"12345678\", \"87654321\"]," +
" \"name\" : \"yuanzhifei89\"," +
" \"age\" : 100," +
" \"address\" : { \"country\" : \"china\", \"province\" : \"jiangsu\" }," +
" \"married\" : false," +
"}";
try {
JSONTokener jsonTokener = new JSONTokener(JSON);
/* 此时还未读取任何json文本,直接读取就是一个JSONObject对象。
如果此时的读取位置在"name" : 了,那么nextValue就是"yuanzhifei89"(String)
*/
JSONObject person = (JSONObject) jsonTokener.nextValue();
/* 接下来的就是JSON对象的操作了 */
person.getJSONArray("phone");
person.getString("name");
person.getInt("age");
person.getJSONObject("address");
person.getBoolean("married");
} catch (JSONException ex) {
/*异常处理代码 */
}
}

7.2、将json文本解析为文本
我们可以通过JSONTokener的一些方法将json文本解析为文本
实例5
void startJSONTokenerDemo2(){
final String JSON =
"{" +
" \"phone\" : [\"12345678\", \"87654321\"]," +
" \"name\" : \"yuanzhifei89\"," +
" \"age\" : 100," +
" \"address\" : { \"country\" : \"china\", \"province\" : \"jiangsu\" }," +
" \"married\" : false," +
"}";
try {
JSONTokener jsonTokener = new JSONTokener(JSON);
/* 继续向下读json文本中的8个字符。此时刚开始,即在{处 */
Log.i(tag,"jsonTokener.next(8)|"+jsonTokener.next(8));
/* 继续向下读json文本中的1个字符 */
Log.i(tag,"jsonTokener.next()|"+jsonTokener.next());
/* 继续向下读取一个json文本中的字符。该字符不是空白、同时也不是注释中的字符 */
Log.i(tag,"jjsonTokener.nextClean()|"+jsonTokener.nextClean());
/* 返回当前的读取位置到第一次遇到'a'之间的字符串(不包括a)。 */
Log.i(tag,"jsonTokener.nextString('a')|"+jsonTokener.nextString('a'));
/* 返回当前读取位置到第一次遇到字符串中(如"0089")任意字符之间的字符串,同时该字符是trimmed的。(此处就是第一次遇到了89)*/
Log.i(tag,"jsonTokener.nextTo(\"0089\")|"+jsonTokener.nextTo("0089") );
/* 读取位置回退一个 */
jsonTokener.back();
Log.i(tag,"jsonTokener.back()");
Log.i(tag,"jsonTokener.next()|"+jsonTokener.next());
/* 读取位置前进到指定字符串处(包括字符串)*/
jsonTokener.skipPast("address");
Log.i(tag,"skipPast(\"address\")");
Log.i(tag,"jsonTokener.next(8)|"+jsonTokener.next(8));
/* 读取位置前进到执行字符处(不包括字符) */
Log.i(tag,"jsonTokener.skipTo('m')|"+jsonTokener.skipTo('m'));
jsonTokener.next(8);
Log.i(tag,"jsonTokener.next(8)|"+jsonTokener.next(8));
} catch (JSONException ex) {
// 异常处理代码
}
}

运行结果:
03-28 22:05:03.800: I/robin(10412): jsonTokener.next(8)|{ "pho
03-28 22:05:03.800: I/robin(10412): jsonTokener.next()|n
03-28 22:05:03.800: I/robin(10412): jjsonTokener.nextClean()|e
03-28 22:05:03.800: I/robin(10412): jsonTokener.nextString('a')|" : ["12345678", "87654321"], "n
03-28 22:05:03.800: I/robin(10412): jsonTokener.nextTo("0089")|me" : "yuanzhifei
03-28 22:05:03.800: I/robin(10412): jsonTokener.back()
03-28 22:05:03.800: I/robin(10412): jsonTokener.next()|i
03-28 22:05:03.800: I/robin(10412): skipPast("address")
03-28 22:05:03.800: I/robin(10412): jsonTokener.next(8)|" : { "c
03-28 22:05:03.800: I/robin(10412): jsonTokener.skipTo('m')|m
03-28 22:05:03.810: I/robin(10412): jsonTokener.next(8)| : false

八、<wbr><span style="line-height:18px; background-color:rgb(250,250,250); font-family:Monaco,'DejaVu Sans Mono','Bitstream Vera Sans Mono',Consolas,'Courier New',monospace">JsonReader</span></wbr>

原文:http://tonysun3544.iteye.com/blog/1330027
在google android中也有关于解析JSON的类库:java.io.JsonReader,但是只能在3.0以后的版本中才可以用,在这里我们用google提供的类库google-gson,可以从code.google.com/p/google-gson/下载jar包。
下面通过一个小例子来学习一下:
例子:
[{"name":"zhangsan","age":22},{"name":"lisi","age":23}]
分析:
1.开始解析数组
2.开始解析对象
3.解析键值对
4.解析键值对
5.解析对象结束
6.开始解析对象
7.解析键值对
8.解析键值对
9.解析对象结束
10.解析数组结束
示例8
void startJsonReaderDemo(){
private String jsonData = "[{\"name\":\"zhangsan\",\"age\":22},{\"name\":\"lisi\",\"age\":23}]";
JsonReader reader = new JsonReader(new StringReader(jsonData));
try
{
reader.beginArray(); /* 开始解析数组 */
while (reader.hasNext())
{
reader.beginObject(); /* 开始解析对象 */
while (reader.hasNext())
{
String tagName = reader.nextName(); /* 得到键值对中的key */
/* key为name时/*
if (tagName.equals("name"))
{
Log.i(tag, "name--------->" + reader.nextString()); /* 得到key中的内容 */
} else if (tagName.equals("age"))/* key为age时*/
{
Log.i(tag, "age--------->" + reader.nextInt()); /* 得到key中的内容 */
}
}
reader.endObject();
}
reader.endArray();
} catch (IOException e)
{
e.printStackTrace();
}
}

结束

android中json解析及使用 (下)相关推荐

  1. android中json解析及使用(上)

    本文整理自:http://www.open-open.com/lib/view/open1326376799874.html 一.JSON的定义 JSON是一种轻量级的数据交换格式,具有良好的可读和便 ...

  2. Android中JSON解析细解及实例

    1.JSON解析 (1).解析Object之一: {"url":"www.cnasda.com"} 解析方法: JSONObject demoJson = ne ...

  3. android中json解析及使用(中)

    接上文 六.通过JSONObject与JSONArray来解析json 我们可以通过JSONObject与JSONArray的getInt,getString,getDouble,getJSONArr ...

  4. android libbfaac.so,Android中Json数据读取与创建

    一:  Json的特性和在数据交互中的地位就不用说了,直接看案例. 首先在android studio中创建assets文件目录,用于存放Json数据文件,android studio 1.3 默认项 ...

  5. OC中JSON解析与XML解析

    文章目录 ###JSON JSON是一种轻量级的数据格式,一般用于数据交互: 服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外). JSON的格式很像OC中的字典和数组,标准 ...

  6. Android中Json数据解析

    Android学习系列(20)--App数据格式之解析Json (很基本基础的入门,对json的基础讲的很好) http://my.eoe.cn/874311/archive/1936.html An ...

  7. android之json解析优化,Android开发之json解析

    目前正在尝试着写app,发现看懂代码和能写出来差距很大,最关键的是java基础比较的差,因为只会python,java基础只学习了一个礼拜就过了.感觉java写出来的代码不如python简单明了. 上 ...

  8. 浅谈Android项目----JSON解析(4种解析技术详解)

    json简介 1.概念:json全称是javaScript object Notation,是一种并轻量级的数据交换格式. 2.特点: 1.本质就是具有特定格式的字符串 2.json完全独立于编程语言 ...

  9. android中json插件,【Android原生插件】package.json中关于第三方aar的配置

    按照文档(https://ask.dcloud.net.cn/article/35414)所说: dependencies节点特殊说明 android插件中集成的第三方SDK 如果是jar或so放入到 ...

最新文章

  1. c语言50行左右程序,谁有50行和300行左右又简单的程序,急需
  2. 三级网络技术_中小型网络系统总体规划与设计方法
  3. 【kafka】Kafka Consumer 中的心跳线程有什么作用?
  4. 【Hadoop学习】Super用户以其他用户的名义执行操作
  5. Java入门基础知识
  6. linux 查看内存大小命令,Linux查看命令:CPU型号,内存大小,硬盘空间
  7. centos7zabbix-agen安装
  8. HBase之一月速成:整合phoenix
  9. Linux系统操作命令
  10. 帆软报表 异常汇总及方案.
  11. 网易有道,能否看透“K12双减”风浪?
  12. C语言参数传递——地址传递与值传递
  13. Wpf依赖属性和附加属性在样式中的应用
  14. 蓝牙5.0跟蓝牙4.2的区别
  15. HTML5声音引擎Howler.js简介
  16. 计算机簇的定义,代数簇
  17. python random库生成伯努利随机数的方法_详解Python基础random模块随机数的生成
  18. android录音实现
  19. 企业网站建设专家-PageAdmin企业网站管理系统
  20. acunetix wvs网站漏洞扫描

热门文章

  1. [20170816]Join Elimination Bug.txt
  2. POJ 1451 T9 (字典树好题)
  3. jQuery控制表单重置
  4. HP OSPF 实验(多区域)
  5. Linux下怎么使用任务管理器和真人接口源码出售进程管理
  6. django 钉钉扫码登录
  7. Nginx图片防盗链、缓存和压缩的示例
  8. VertrigoServ 2.21配置phpmyadmin
  9. jQuery通过event获取点击事件的事件对象
  10. oracle创建表之前判断表是否存在,如果存在则删除已有表