Android 之 json数据的解析(jsonReader)
json数据的解析相对而言,还是比较容易的,实现的代码也十分简单。这里用的是jsonReade方法来进行json数据解析。
1.在解析之前,大家需要知道什么是json数据。
json数据存储的对象是无序的“名称/值”对的集合。和其他的数据存储方式相比,json数据的可读性,可扩展性,编码难度,解码难度都有一定的优势。在json数据中,
对于一个对象:
(1)一个对象以“{”(左括号)开始,“}”(右括号)结束。
(2)每个“名称”后跟一个“:”(冒号);
(3)“‘名称/值’ 对”之间使用“,”(逗号)分隔。
对于一个数组:
(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)的更多相关文章
- android基础---->JSON数据的解析
上篇博客,我们谈到了XML两种常用的解析技术,详细可以参见我的博客(android基础---->XMl数据的解析).网络传输另外一种数据格式JSON就是我们今天要讲的,它是比XML体积更小的数据 ...
- android实现json数据的解析和把数据转换成json格式的字符串
利用android sdk里面的 JSONObject和JSONArray把集合或者普通数据,转换成json格式的字符串 JSONObject和JSONArray解析json格式的字符串为集合或者一般 ...
- android基础---->XMl数据的解析
在网络上传输数据时最常用的格式有两种,XML和JSON,下面首先学一下如何解析XML格式的数据,JSON的解析可以参见我的博客(android基础---->JSON数据的解析).解析XML 格式 ...
- Android系列---JSON数据解析
您可以通过点击 右下角 的按钮 来对文章内容作出评价, 也可以通过左下方的 关注按钮 来关注我的博客的最新动态. 如果文章内容对您有帮助, 不要忘记点击右下角的 推荐按钮 来支持一下哦 如果您对文章内 ...
- Android 实现Json数据解析,并进行应用!
从网站上获取数据然后再客户端进行解析是常见的数据交互.下面是常用的一些接口网址: webservice工厂接口 http://www.36wu.com 快递查询接口http://webservice. ...
- Android 之JSON数据解析
(以下基本都是郭霖大神<第一行代码>中的知识) JSON数据与xml相比,优势在于体积更小,传输所需的流量少.但是缺点也很明显,就是语义性较差. 下面是一组JSON格式的数据. [{&qu ...
- Android关于JSON数据解析
一.什么是json json(Javascript Object Notation)是一种轻量级的数据交换格式,相比于xml这种数据交换格式来说,因为解析xml比较的复杂,而且需要编写大段的代码,所以 ...
- iOS开发网络篇—JSON数据的解析
iOS开发网络篇—JSON数据的解析 iOS开发网络篇—JSON介绍 一.什么是JSON JSON是一种轻量级的数据格式,一般用于数据交互 服务器返回给客户端的数据,一般都是JSON格式或者XML格式 ...
- HttpURLConnection从网上获取Json数据并解析详解
HttpURLConnection从网上获取Json数据并解析 1.HttpURLConnection请求数据的步骤 (1)构造一个URL接口地址: URL url = new URL("h ...
随机推荐
- Android 布局之LinearLayout
Android 布局之LinearLayout 1 LinearLayout简介 LinearLayout是线程布局.它包括2个方向(android:orientation):“水平”(horizon ...
- [转载]SharePoint 2013搜索学习笔记之自定义结果源
搜索中心新建好之后在搜索结果页上会默认有所有内容,人员,对话,视频这四个结果分类,每个分类会返回指定范围的搜索结果,这里我再添加了部门日志结果分类,搜索这个分类只会返回部门日志内容类型的搜索结果,要实 ...
- TypeWonder – 在任何网站上实时预览字体效果
TypeWonder 让网页字体的选择过程变得轻松愉快.它可以帮助您在任何网站上快速测试 Web 字体效果!输入网站网址,就能够即时预览的字体的实际效果,还可以从数百种字体中进行挑选,您还可以得到所需 ...
- python第三方模块精选
python不但有着强大丰富的“内置电池”,同样的,第三方模块也是非常的多.目前收集了requests.paramiko.pymsql,以后会陆续添加: 一.requests Python标准库中提供 ...
- Parameter配置文件获取
public class ConfigInfo { public static ParametersHelper Parameters { get { return new ParametersHel ...
- Week2 Bing词典Android客户端案例分析
一.软件调研 运行平台:Android 4.4.4 必应版本:5.2.2 1.bug发现 1.1 bug标题:单词挑战无法加载和刷新 bug详细描述:学习界面中的单词挑战模块,点击后没有任何反映,并且 ...
- spring日记------部署环境、写demo
一.安装jdk1.7 祥见http://zhinan.sogou.com/guide/detail/?id=1610006590 二.创建web项目 略 三.配置ssm环境 3.1添加spring.m ...
- 移动web开发总结
让网页的宽度自适应屏幕<meta name="viewport" content="width=device-width"/> 1)html上加 ...
- Python入门笔记(17):错误、异常
一.什么是错误,什么是异常,它们两者区别 这里解释如下:个人觉得很通俗易懂 错误是指在执行代码过程中发生的事件,它中断或干扰代码的正常流程并创建异常对象.当错误中断流程时,该程序将尝试寻找异常处理程序 ...
- ACCESS作为网站数据库的弊端
现在网上绝大多数网站都是ACCESS+ASP的形式,因为ACCESS结构简单容易处理,而且也能满足多数的网站程序要求. ACCESS是小型数据库,既然是小型就有他根本的局限性,以下几种情况下数据库基本 ...