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

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

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

对于一个对象:

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

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

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

对于一个数组:

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

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

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

  1. [
  2. {
  3. "id": 912345678901,
  4. "text": "How do I read JSON on Android?",
  5. "geo": null,
  6. "user": {
  7. "name": "android_newb",
  8. "followers_count": 41
  9.   }
  10. },
  11. {
  12. "id": 912345678902,
  13. "text": "@android_newb just use android.util.JsonReader!",
  14. "geo": [50.454722, -104.606667],
  15. "user": {
  16. "name": "jesse",
  17. "followers_count": 2
  18. }
  19. }
  20. ]

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

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

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

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

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

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

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

  1. package com.mecury.jsontest;
  2.  
  3. import java.io.IOException;
  4. import java.io.StringReader;
  5. import android.util.JsonReader;
  6. import android.util.JsonToken;
  7. public class JsonUtils {
  8.  
  9. public void parseJson(String jsonDate) throws IOException{
  10. //创建JsonReader对象
  11. JsonReader jsReader = new JsonReader(new StringReader(jsonDate));
  12. jsReader.beginArray();
  13. while (jsReader.hasNext()) {
  14. readMessage(jsReader);
  15. }
  16. jsReader.endArray();
  17.  
  18. }
  19.  
  20. public void readMessage(JsonReader jsReader) throws IOException{
  21. jsReader.beginObject();
  22. while(jsReader.hasNext()){
  23. String tagName = jsReader.nextName();
  24. if (tagName.equals("id")) {
  25. System.out.println("name:"+jsReader.nextLong());
  26. }else if (tagName.equals("text")) {
  27. System.out.println("text:"+jsReader.nextString());
  28. }else if (tagName.equals("geo") && jsReader.peek()!=JsonToken.NULL) {
  29. readDoubleArray(jsReader);
  30. }else if (tagName.equals("user")) {
  31. readUser(jsReader);
  32. }else {
  33. //跳过当前值
  34. jsReader.skipValue();
  35. System.out.println("skip======>");
  36. }
  37. }
  38. jsReader.endObject();
  39. }
  40. //解析geo中的数据
  41. public void readDoubleArray(JsonReader jsReader) throws IOException{
  42. jsReader.beginArray();
  43. while(jsReader.hasNext()){
  44. System.out.println(jsReader.nextDouble());
  45. }
  46. jsReader.endArray();
  47. }
  48. //由于读取user中的数据
  49. public void readUser(JsonReader jsReader) throws IOException{
  50. String userName = null;
  51. int followsCount = -1;
  52. jsReader.beginObject();
  53. while (jsReader.hasNext()) {
  54. String tagName = jsReader.nextName();
  55. if (tagName.equals("name")) {
  56. userName = jsReader.nextString();
  57. System.out.println("user_name:"+ userName);
  58. }else if (tagName.equals("followers_count")) {
  59. followsCount = jsReader.nextInt();
  60. System.out.println("followers_count:"+followsCount);
  61. }
  62. }
  63. jsReader.endObject();
  64. }
  65. }

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

  1. 11-22 06:59:52.441: I/System.out(5329): name:912345678901
  2. 11-22 06:59:52.441: I/System.out(5329): text:How do I read JSON on Android?
  3. 11-22 06:59:52.461: I/System.out(5329): skip======>
  4. 11-22 06:59:52.461: I/System.out(5329): user_name:android_newb
  5. 11-22 06:59:52.471: I/System.out(5329): followers_count:41
  6. 11-22 06:59:52.481: I/System.out(5329): name:912345678902
  7. 11-22 06:59:52.491: I/System.out(5329): text:@android_newb just use android.util.JsonReader!
  8. 11-22 06:59:52.500: I/System.out(5329): 50.454722
  9. 11-22 06:59:52.500: I/System.out(5329): -104.606667
  10. 11-22 06:59:52.510: I/System.out(5329): user_name:jesse
  11. 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. Android 布局之LinearLayout

    Android 布局之LinearLayout 1 LinearLayout简介 LinearLayout是线程布局.它包括2个方向(android:orientation):“水平”(horizon ...

  2. [转载]SharePoint 2013搜索学习笔记之自定义结果源

    搜索中心新建好之后在搜索结果页上会默认有所有内容,人员,对话,视频这四个结果分类,每个分类会返回指定范围的搜索结果,这里我再添加了部门日志结果分类,搜索这个分类只会返回部门日志内容类型的搜索结果,要实 ...

  3. TypeWonder – 在任何网站上实时预览字体效果

    TypeWonder 让网页字体的选择过程变得轻松愉快.它可以帮助您在任何网站上快速测试 Web 字体效果!输入网站网址,就能够即时预览的字体的实际效果,还可以从数百种字体中进行挑选,您还可以得到所需 ...

  4. python第三方模块精选

    python不但有着强大丰富的“内置电池”,同样的,第三方模块也是非常的多.目前收集了requests.paramiko.pymsql,以后会陆续添加: 一.requests Python标准库中提供 ...

  5. Parameter配置文件获取

    public class ConfigInfo { public static ParametersHelper Parameters { get { return new ParametersHel ...

  6. Week2 Bing词典Android客户端案例分析

    一.软件调研 运行平台:Android 4.4.4 必应版本:5.2.2 1.bug发现 1.1 bug标题:单词挑战无法加载和刷新 bug详细描述:学习界面中的单词挑战模块,点击后没有任何反映,并且 ...

  7. spring日记------部署环境、写demo

    一.安装jdk1.7 祥见http://zhinan.sogou.com/guide/detail/?id=1610006590 二.创建web项目 略 三.配置ssm环境 3.1添加spring.m ...

  8. 移动web开发总结

    让网页的宽度自适应屏幕<meta name="viewport" content="width=device-width"/>   1)html上加 ...

  9. Python入门笔记(17):错误、异常

    一.什么是错误,什么是异常,它们两者区别 这里解释如下:个人觉得很通俗易懂 错误是指在执行代码过程中发生的事件,它中断或干扰代码的正常流程并创建异常对象.当错误中断流程时,该程序将尝试寻找异常处理程序 ...

  10. ACCESS作为网站数据库的弊端

    现在网上绝大多数网站都是ACCESS+ASP的形式,因为ACCESS结构简单容易处理,而且也能满足多数的网站程序要求. ACCESS是小型数据库,既然是小型就有他根本的局限性,以下几种情况下数据库基本 ...