json数据的解析相对而言,还是比较容易的,实现的代码也十分简单。这里用的是jsonReade方法来进行json数据解析。

1.在解析之前,大家需要知道什么是json数据。

json数据存储的对象是无序的“名称/值”对的集合。和其他的数据存储方式相比,json数据的可读性,可扩展性,编码难度,解码难度都有一定的优势。在json数据中,

对于一个对象:

(1)一个对象以“{”(左括号)开始,“}”(右括号)结束。

(2)每个“名称”后跟一个“:”(冒号);

(3)“‘名称/值’ 对”之间使用“,”(逗号)分隔。

对于一个数组:

(1)一个数组以“[”(左中括号)开始,“]”(右中括号)结束。

(2)值之间使用“,”(逗号)分隔。

下面是android官方给出的一组json数据示例:

[
{
"id": 912345678901,
"text": "How do I read JSON on Android?",
"geo": null,
"user": {
"name": "android_newb",
"followers_count": 41
  }
},
{
"id": 912345678902,
"text": "@android_newb just use android.util.JsonReader!",
"geo": [50.454722, -104.606667],
"user": {
"name": "jesse",
"followers_count": 2
}
}
]

在代码中,如果直接定义json数据,需要在代码中对 “ 使用 \ 转义。上面json在代码中的形式为:(在java代码中,创建一段json数据,“ 符号需要转义)

    private String jsonDate = "["
+ "{\"id\": 912345678901,"
+ "\"text\":\"How do I read JSON on Android?\","
+ "\"geo\":null,"
+ "\"user\":{\"name\":\"android_newb\",\"followers_count\":41}},"
+ "{\"id\": 912345678902,"
+ "\"text\":\"@android_newb just use android.util.JsonReader!\","
+ "\"geo\":[50.454722,-104.606667],"
+ "\"user\":{\"name\":\"jesse\",\"followers_count\":2}}"
+ "]";

1. 使用JsonReader方法解析Json数据对象,你需要创建一个JsonReader对象.

2.然后使用beginArray()来开始解析 [ 左边的第一个数组。

3.再使用beginObject()来开始解析数组{中的第一个对象。

4.对于直接的数据可以直接得到解析到的数据,但对于在json中嵌套了数组的数据,需要在写一个解析方法。

5.在解析完成后,别忘用endArray(),endObject()来关闭解析。

package com.mecury.jsontest;

import java.io.IOException;
import java.io.StringReader;
import android.util.JsonReader;
import android.util.JsonToken;
public class JsonUtils { public void parseJson(String jsonDate) throws IOException{
//创建JsonReader对象
JsonReader jsReader = new JsonReader(new StringReader(jsonDate));
jsReader.beginArray();
while (jsReader.hasNext()) {
readMessage(jsReader);
}
jsReader.endArray(); } public void readMessage(JsonReader jsReader) throws IOException{
jsReader.beginObject();
while(jsReader.hasNext()){
String tagName = jsReader.nextName();
if (tagName.equals("id")) {
System.out.println("name:"+jsReader.nextLong());
}else if (tagName.equals("text")) {
System.out.println("text:"+jsReader.nextString());
}else if (tagName.equals("geo") && jsReader.peek()!=JsonToken.NULL) {
readDoubleArray(jsReader);
}else if (tagName.equals("user")) {
readUser(jsReader);
}else {
//跳过当前值
jsReader.skipValue();
System.out.println("skip======>");
}
}
jsReader.endObject();
}
//解析geo中的数据
public void readDoubleArray(JsonReader jsReader) throws IOException{
jsReader.beginArray();
while(jsReader.hasNext()){
System.out.println(jsReader.nextDouble());
}
jsReader.endArray();
}
//由于读取user中的数据
public void readUser(JsonReader jsReader) throws IOException{
String userName = null;
int followsCount = -1;
jsReader.beginObject();
while (jsReader.hasNext()) {
String tagName = jsReader.nextName();
if (tagName.equals("name")) {
userName = jsReader.nextString();
System.out.println("user_name:"+ userName);
}else if (tagName.equals("followers_count")) {
followsCount = jsReader.nextInt();
System.out.println("followers_count:"+followsCount);
}
}
jsReader.endObject();
}
}

对上面的内容解析的输出:

11-22 06:59:52.441: I/System.out(5329): name:912345678901
11-22 06:59:52.441: I/System.out(5329): text:How do I read JSON on Android?
11-22 06:59:52.461: I/System.out(5329): skip======>
11-22 06:59:52.461: I/System.out(5329): user_name:android_newb
11-22 06:59:52.471: I/System.out(5329): followers_count:41
11-22 06:59:52.481: I/System.out(5329): name:912345678902
11-22 06:59:52.491: I/System.out(5329): text:@android_newb just use android.util.JsonReader!
11-22 06:59:52.500: I/System.out(5329): 50.454722
11-22 06:59:52.500: I/System.out(5329): -104.606667
11-22 06:59:52.510: I/System.out(5329): user_name:jesse
11-22 06:59:52.510: I/System.out(5329): followers_count:2

Android 之 json数据的解析(jsonReader)的更多相关文章

  1. android基础---->JSON数据的解析

    上篇博客,我们谈到了XML两种常用的解析技术,详细可以参见我的博客(android基础---->XMl数据的解析).网络传输另外一种数据格式JSON就是我们今天要讲的,它是比XML体积更小的数据 ...

  2. android实现json数据的解析和把数据转换成json格式的字符串

    利用android sdk里面的 JSONObject和JSONArray把集合或者普通数据,转换成json格式的字符串 JSONObject和JSONArray解析json格式的字符串为集合或者一般 ...

  3. android基础---->XMl数据的解析

    在网络上传输数据时最常用的格式有两种,XML和JSON,下面首先学一下如何解析XML格式的数据,JSON的解析可以参见我的博客(android基础---->JSON数据的解析).解析XML 格式 ...

  4. Android系列---JSON数据解析

    您可以通过点击 右下角 的按钮 来对文章内容作出评价, 也可以通过左下方的 关注按钮 来关注我的博客的最新动态. 如果文章内容对您有帮助, 不要忘记点击右下角的 推荐按钮 来支持一下哦 如果您对文章内 ...

  5. Android 实现Json数据解析,并进行应用!

    从网站上获取数据然后再客户端进行解析是常见的数据交互.下面是常用的一些接口网址: webservice工厂接口 http://www.36wu.com 快递查询接口http://webservice. ...

  6. Android 之JSON数据解析

    (以下基本都是郭霖大神<第一行代码>中的知识) JSON数据与xml相比,优势在于体积更小,传输所需的流量少.但是缺点也很明显,就是语义性较差. 下面是一组JSON格式的数据. [{&qu ...

  7. Android关于JSON数据解析

    一.什么是json json(Javascript Object Notation)是一种轻量级的数据交换格式,相比于xml这种数据交换格式来说,因为解析xml比较的复杂,而且需要编写大段的代码,所以 ...

  8. iOS开发网络篇—JSON数据的解析

    iOS开发网络篇—JSON数据的解析 iOS开发网络篇—JSON介绍 一.什么是JSON JSON是一种轻量级的数据格式,一般用于数据交互 服务器返回给客户端的数据,一般都是JSON格式或者XML格式 ...

  9. HttpURLConnection从网上获取Json数据并解析详解

    HttpURLConnection从网上获取Json数据并解析 1.HttpURLConnection请求数据的步骤 (1)构造一个URL接口地址: URL url = new URL("h ...

随机推荐

  1. Flow: JavaScript静态类型检查工具

    Flow: JavaScript静态类型检查工具 Flow是Facebook出品的,针对JavaScript的静态类型检查工具.其代码托管在github之上,并遵守BSD开源协议. 关于Flow 它可 ...

  2. Velocity魔法堂系列三:模板与宿主环境通信

    一.前言 Velocity作为历史悠久的模板引擎不单单可以替代JSP作为Java Web的服务端网页模板引擎,而且可以作为普通文本的模板引擎来增强服务端程序文本处理能力.而且Velocity被移植到不 ...

  3. JS魔法堂:关于元素位置和鼠标位置的属性

    一.关于鼠标位置的属性   1. 触发鼠标事件的区域 盒子模型中的border,padding,content区域会触发鼠标事件,点击margin区域将不触发鼠标事件.   2. 鼠标事件对象Mous ...

  4. Week3 博客阅读感想和代码复审

    一.关于博客阅读感想 阅读了十多篇老程序员(大多在计算机相关行业工作超过10年)关于自身经历的博客,很有感触.这里一方面总结一下看博客的收获,另一方面写点自己的感受. 首先,这些博客不少涉及到了两大类 ...

  5. JavaScript异常捕获

    理论准备 ★   异常捕获 △ 异常:当JavaScript引擎执行JavaScript代码时,发生了错误,导致程序停止运行: △ 异常抛出:当异常产生,并且这个异常生成一个错误信息: △ 异常捕获: ...

  6. .net接口学习笔记

    1.接口的声明 接口的声明不能包含:数据成员,静态变量:只能包含如下类型的静态成员函数的声明:方法,属性,事件,索引器.声明中不能包含任何实现的代码,而在每个成员成名的主体后,必须使用分号. 接口声明 ...

  7. sql语句创建新登录名和设置权限

    use DBName go --新增用户 exec sp_addlogin '用户名','密码','默认数据库名' --添加登录 exec sp_grantdbaccess N'test' --使其成 ...

  8. 重新想象 Windows 8 Store Apps (50) - 输入: 边缘手势, 手势操作, 手势识别

    [源码下载] 重新想象 Windows 8 Store Apps (50) - 输入: 边缘手势, 手势操作, 手势识别 作者:webabcd 介绍重新想象 Windows 8 Store Apps ...

  9. 小白学Linux(三)--文件系统基本结构

    Linux文件系统是一个倒立的单根树状结构,文件名称严格区分大小写(windows系统则是对大小写不明感的).路径用“/”分隔,跟windows的“\”不同. 这里我画了一张一般Linux系统的正常目 ...

  10. 由SimpleAyncTaskExecutor到ListenableFutureTask

    Spring AsyncExecutor观后感 导语 本来想看下spring关于Async&Sync TaskExecutor的主要内容,看着看着发现ListenableTaskExecuto ...