Android开发之JSON数据解析详解(一)

来源:互联网 发布:官方唯一指定域名24777 编辑:程序博客网 时间:2024/05/17 17:59


今天很高兴和大家一起学习Android的JSON数据解析,可能对于学习安卓的朋友都知道JSON在数据解析方面已经很普遍了.所以也是我们必定要了解的知识 ,下面让我们了解一下JSON的发展历程.

XML——这种用于表示客户端与服务器间数据交换有效负载的格式,几乎已经成了Web services的同义词。然而,由于Ajax和REST技术的出现影响了应用程序架构,这迫使人们开始寻求`XML的替代品,如:JavaScript Object Notation(JSON)。

  JSON 作为一种更轻、更友好的 Web services客户端的格式(多采用浏览器的形式或访问 REST风格 Web服务的Ajax应用程序的形式)引起了 Web 服务供应商的注意。

  本文将阐述JSON在Web services设计中备受推崇的原因,以及它作为XML替代方案的主要优势和局限性。文中还会深入探讨:随着相应的Web 服务客户端选择使用JSON,如何才能便捷地在Java Web services中生成JSON输出。

XML的十字路口: 浏览器和 Ajax

  XML设计原理已经发布了将近十年。时至今日,这种标记语言已经在广阔的软件应用领域中占据了主导地位。从Java、.NET等主流平台中的配置和部署描述符到应用集成场景中更复杂的应用,XML与生俱来的语言无关性使之在软件架构师心目中占据着独特的地位。但即便最著名的XML权威也不得不承认:在某些环境中,XML的使用已经超出了它自身能力的极限。

  围绕Ajax原理构建的那些Web应用程序最能说明XML的生存能力,从这一点来看,一种新的有效负载格式的发展壮大也得益于XML。这种新的有效负载格式就是JavaScript Object Notation (JSON)。在探索这种新的标记语言的复杂性之前,首先来分析一下在这种独特的设计形式中,XML具有哪些局限性。

  Ajax建立了一个用于从远程Web services发送和接收数据的独立信道,从而允许Web程序执行信道外(out-of-band)客户端/服务器调用。通俗地说,Ajax程序中的更新和导航序列在典型的客户端/服务器环境之外完成,在后台(即信道外)接受到信息后,必须进行一次完整的屏幕刷新。更多背景信息,请参阅David Teare的 Ajax简介(Dev2Dev)。

  这些应用程序更新通常是通过REST风格(RESTful)Web services获得的,一旦被用户的浏览器接收到,就需要整合到HTML页面的总体布局之中,这正是XML发挥强大力量的场合。尽管近年来,脚本语言支持和插件支持已使大多数主流浏览器的功能得到了强化,但许多编程任务依然难于开展,其中之一就是操纵或处理文本,这通常是使用DOM实现的。

  采用DOM的复杂性源于其基于函数的根,这使得对数据树的简单修改或访问都需要进行无数次方法调用。此外,众所周知,DOM在各种浏览器中的实现细节不尽相同,这一过程将带来极为复杂的编程模式,其跨浏览器兼容性出现问题的可能性极大。接下来的问题显而易见,那就是:如何使一种标记语言轻松集成到HTML页面中以满足Ajax的要求?

  问题的答案就是:利用所有主流浏览器中的一种通用组件——JavaScript引擎。XML需要使用DOM之类的机制来访问数据并将数据整合到布局之中,采用这种方法,我们不再使用像XML这样的格式来交付Ajax更新,而是采用一种更为简单直观的方式,采用JavaScript引擎自然匹配的格式——也就是JSON。

  既然已经明确了JSON与XML和Ajax之间的关系,下面将进一步探讨JSON背后的技术细节。

SON剖析:优点和不足

  对于JSON,首先要明白JSON和XML一样也是一种简单文本格式。相对于XML,它更加易读、更便于肉眼检查。在语法的层面上,JSON与其他格式的区别是在于分隔数据的字符,JSON中的分隔符限于单引号、小括号、中括号、大括号、冒号和逗号。下图是一个JSON有效负载:

   {"addressbook": {"name": "Mary Lebow",       "address": {           "street": "5 Main Street"           "city": "San Diego, CA",           "zip": 91912,       },       "phoneNumbers": [           "619 332-3452",           "664 223-4667"       ]    }   }

上面的格式没看清楚不要紧,我们慢慢来分析.

下面我们来看看JSON的数据结构:

1.JSON数据结构

  在JSON中有两种数据结构:对象和数组。

1.1对象

  在JSON中,一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号),冒号后是该名称的值,多个“名称:值”之间使用 “,”(逗号)分隔开来。名称需要使用双引号括起来,值如果是字符串则必须用双引号括起来,如果是数值型则不需要。其结构示意图如图1所示。

例如:


{"name":"BruceCheng", "age":22,"address":"安徽省合肥市"}

1.2数组

  在JSON中,数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用 “,”(逗号)分隔开来。其结构示意图如图2所示。


例如:

["Android","IOS","Syphone","BlackBerry"]

那么在JSON数据中值的类型有哪些呢?

竟然JSON的数据类型是多种多样的那么我们就可以利用不同类型的数据组合成复杂的数据类型:

  {"addressbook": {"name": "Mary Lebow",       "address": {           "street": "5 Main Street"           "city": "San Diego, CA",           "zip": 91912,       },       "phoneNumbers": [           "619 332-3452",           "664 223-4667"       ]    }   }

我们来分析分析:

从上面整体来看是一个Object类型,该Object类型中有一个成员为:"addressbook"

"addressbook"的数据结构又是一个Object类型,

该Object类型又包含三个成员,分别是"name","address","phoneNumbers"

这三个成员数据结构的类型分别是:String,Object,Array,

"name"的值为String类型

"address"的数据结构为Object类型,它又包含三个子成员,分别是:"street","city","zip",这三个成员的数据结构类型的类型均为String类型,
"phoneNumbers"成员的数据结构为数组类型,包含两个成员为String类型.

好的今天就简单的介绍JSON的基本情况,下一篇我为大家介绍JSON工作的基本原理以及简单的使用

原创粉丝点击