JSON数据格式,在Android中被广泛运用于客户端和网络(或者说服务器)通信,非常有必要系统的了解学习。
     恰逢本人最近对json做了一个简单的学习,特此总结一下,以飨各位。
     为了文章简明清晰,尽量多列点,少废话。
     参考文档:http://www.ietf.org/rfc/rfc4627.txt?number=4627

1.JSON解析
     (1).解析Object之一:

  解析方法:

1
2
JSONObject demoJson = new JSONObject(jsonString);
String url = demoJson.getString("url");

  (2).解析Object之二:

1
{"name":"android","name":"iphone"}

  解析方法:

1
2
3
4
JSONObject demoJson = new JSONObject(jsonString);
String name = demoJson.getString("name");
String version = demoJson.getString("version");
System.out.println("name:"+name+",version:"+version);

     (3).解析Array之一:

1
{"number":[1,2,3]}

   解析方法:

1
2
3
4
5
6
JSONObject demoJson = new JSONObject(jsonString);
JSONArray numberList = demoJson.getJSONArray("number");
for(int i=0; i<numberList.length(); i++){
    //因为数组中的类型为int,所以为getInt,其他getString,getLong同用
    System.out.println(numberList.getInt(i));
}

  (4).解析Array之二:

1
{"number":[[1],[2],[3]]}

  解析方法:

1
2
3
4
5
6
7
//嵌套数组遍历
JSONObject demoJson = new JSONObject(jsonString);
JSONArray numberList = demoJson.getJSONArray("number");
for(int i=0; i<numberList.length(); i++){
      //获取数组中的数组
      System.out.println(numberList.getJSONArray(i).getInt(0));
}

  (5).解析Object和Array:

1
{"mobile":[{"name":"android"},{"name":"iphone"}]}

  解析方法:

1
2
3
4
5
JSONObject demoJson = new JSONObject(jsonString);
JSONArray numberList = demoJson.getJSONArray("mobile");
for(int i=0; i<numberList.length(); i++){
      System.out.println(numberList.getJSONObject(i).getString("name"));
}

  所以,我们发现get后面接着的是你想要的得到的结果的类型:getType,这个对理解很有帮助。
     (6).使用optType:
      
上面的例子,使用getType在碰到查找不到节点的时候,会抛出异常。
      如果使用optType,找不到节点,则返回null或者默认值。

1
2
3
4
//无url节点,抛出异常
String url = demoJson.getString("url");
//无url节点,返回空,如果为基本类型,则返回默认值
String url = demoJson.optString("url");

  (7).UTF-8的BOM头导致解析JSON异常的问题
      到json文件保存为utf-8的时候,在windows平台下,会产生bom头"EF BB EF"字节在文本的最前面(需要用十六进制工具打开才能看的到)。
      有两种解决方法:
      a.使用UltraEdit打开json文件, 另存为的时候,选择格式UTF-8,无BOM头,如果还不行,在用记事本打开,另存为UTF-8下,多试几次就可以了。
      b.使用代码处理,截取json主体内容:

1
2
String jsonString = getJsonString();
jsonString = jsonString.substring(jsonString.indexOf("{"),jsonString.lastIndexOf("}")+1);

2.JSON必知
     (1).JSON是一种轻量级的数据交换格式
     (2).JSON基于两种数据结构:Object和Array。其中Object是“名称/值”对的集合。
     (3).对象:大括号,每一组string-value结合以","分隔,string和value以冒号分隔。
 
     (4).数组:

     (5).string由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。

     (6).value可以是双引号括起来的字符串(string)、数值(number)、truefalse、 null、对象(object)或者数组(array)。这些结构可以嵌套。

     (7).空白可以加入到任何符号之间,包括空格,tab,回车,换行等。
     (8).举例:
       a.Object实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
{
     "Image": {
      "Width":  800,
      "Height": 600,
      "Title":  "View from 15th Floor",
      "Thumbnail": {
          "Url":    "http://www.example.com/image/481989943",
          "Height": 125,
          "Width":  "100"
      },
      "IDs": [116, 943, 234, 38793]
    }
}

 b.Array实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[
   {
      "precision""zip",
      "Latitude":  37.7668,
      "Longitude": -122.3959,
      "Address":   "",
      "City":      "SAN FRANCISCO",
      "State":     "CA",
      "Zip":       "94107",
      "Country":   "US"
   },
   {
      "precision""zip",
      "Latitude":  37.371991,
      "Longitude": -122.026020,
      "Address":   "",
      "City":      "SUNNYVALE",
      "State":     "CA",
      "Zip":       "94085",
      "Country":   "US"
   }
]

3.小结
      很简单 ,很基础,积水方能成江,累砖才可筑楼。

Android学习系列(20)--App数据格式之解析Json的更多相关文章

  1. Android学习系列(7)--App轮询服务器消息

    这篇文章是android开发人员的必备知识. 1.轮询服务器     一般的应用,定时通知消息可以采用轮询的方法从服务器拿取消息,当然实时消息通知的话,建议采用推送服务.    其中需要注意轮询的频率 ...

  2. Android学习系列(15)--App列表之游标ListView(索引ListView)

    游标ListView,提供索引标签,使用户能够快速定位列表项.      也可以叫索引ListView,有的人称也为Tweaked ListView,可能更形象些吧.      一看图啥都懂了: 1. ...

  3. Android学习系列(23)--App主界面实现

    在上篇文章<Android学习系列(22)--App主界面比较>中我们浅略的分析了几个主界面布局,选了一个最大众化的经典布局.今天我们就这个经典布局,用代码具体的实现它. 1.预览图先看下 ...

  4. Android学习系列(17)--App列表之圆角ListView(续)

    http://www.cnblogs.com/qianxudetianxia/archive/2011/09/19/2068760.html   本来这篇文章想并到上篇Android学习系列(16)- ...

  5. Android学习系列(18)--App工程结构搭建

     本文算是一篇漫谈,谈一谈关于Android开发中工程初始化的时候如何在初期我们就能搭建一个好的架构.      关于android架构,因为手机的限制,目前我觉得也确实没什么大谈特谈的,但是从开发的 ...

  6. Android学习系列(10)--App列表之拖拽ListView(上)

     研究了很久的拖拽ListView的实现,受益良多,特此与尔共飨.      鉴于这部分内容网上的资料少而简陋,而具体的实现过程或许对大家才有帮助,为了详尽而不失真,我们一步一步分析,分成两篇文章. ...

  7. Android学习系列(3)--App自动更新之自定义进度视图和内部存储

    友好的视觉感知和稳定的不出错表现,来自于我们追求美感和考虑的全面性,博客园从技术的角度,一直我都很欣赏.这篇文章是android开发人员的必备知识,是我特别为大家整理和总结的,不求完美,但是有用. 这 ...

  8. Android学习系列(37)--App调试内存泄露之Context篇(下)

    接着<Android学习系列(36)--App调试内存泄露之Context篇(上)>继续分析. 5. AsyncTask对象 我N年前去盛大面过一次试,当时面试官极力推荐我使用AsyncT ...

  9. Android学习系列(11)--App列表之拖拽ListView(下)

    接着上篇Android学习系列(10)--App列表之拖拽ListView(上)我们继续实现ListView的拖拽效果. 7.重写onTouchEvent()方法.     在这个方法中我们主要是处理 ...

随机推荐

  1. Linux下Mysql数据库备份

    今天一同事的电脑无缘无故坏了,找了IT部门检测说是硬盘坏了,数据无法恢复.好悲剧.自己博客也写了好久不容易,要是突然间数据丢了那怎么办!于是写了个数据库自动备份脚本,并创建任务计划,实现每天22:30 ...

  2. EXTJS 4.2 资料 Grid嵌套

    如图: var ParentContCateId = 0; var start = 0; var limit = 20; DistributionPointForm = function () { E ...

  3. 【BZOJ 1053】[HAOI2007]反素数ant

    Description 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4.如果某个正整数x满足:g(x)>g(i) 0<i<x,则称x为反质数.例如,整数1 ...

  4. 有关hadoop分布式配置详解

    linux配置ssh无密码登录 配置ssh无密码登录,先要安装openssh,如下: yum install openssh-clients 准备两台linux服务器或虚拟机,设置两台linux的ho ...

  5. python学习笔记24(路径与文件 (os.path包, glob包))

    os.path模块主要用于文件的属性获取,在编程中经常用到,以下是该模块的几种常用方法. >>> import os.path >>> path = '/home/ ...

  6. [转]oracle10.2.0.1下载链接

    记录一下ORACLE 10gR2的软件下载地址,备用. 下载OTN上的这些软件,你需要一个OTN免费帐号,不过如果通过迅雷进行下载,就不用登陆OTN了: Oracle Database 10g Rel ...

  7. CentOS安装crontab及使用方法

    crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令.该命令从标准输入设备读取指令,并将其存放于 “crontab”文件中,以供之后读取和执行.通常,crontab储 ...

  8. 4.4 spring-自定义标签的解析

    1.0 自定义标签的解析. 在之前的章节中,我们完成了对spring 默认标签的加载过程.那么现在我们将开始新的里程, spring 自定义标签的解析; 代码如下: /** * Parse the e ...

  9. 用IDEA调试Play工程

    IDEA的版本是14.0.1,运行在MAC OS X Yosemite上. IDEA已经装了Scala插件,但是在新建工程中,Scala的选项中并没有Play框架,不知道什么原因. 导入Play工程 ...

  10. 编写你的第一个 Django 程序 第1部分

    原地址:http://django-chinese-docs.readthedocs.org/en/latest/intro/tutorial01.html 让我们通过例子来学习. 在本教程中,我们将 ...