当两个组件之间需要相互通讯(本文指通过互联网):来回传递数据。直到不久前,XML仍旧是可选的方案:作为可选的数据传递格式。通常,其间的通讯涉及一非常繁琐的称之为SOAP的XML格式。

 

  最近一个新的格式已经开始取代XML作为数据传输格式的新选择,尤其是在处理网站和Web应用时,被称为JSON。

  JSON即JavaScript Object Notation,是一种轻量级的数据交换格式,易于人们读写,便于机器生成与解析(详见json.org )。

  大部分主要的编程语言都支持JSON,通过某种方式,或通过支撑库,或某些情况下,内置其处理,例如,.net 的RESTFul服务,可返回XML或JSON。

  起初,我以为JSON仅适用于对象,正如其名称所述,但结果显示,它可以用来代表两类不同的结构:

  • 对象(an Object)
  • 或者,数组(or, an Array)

创建JSON对象

创建一JSON象,方式如下:

  • 左大括号,后跟 名称/值对(name/value pair)
  • 每一 名成/值对 被逗号(,)分隔;
  • 名称/值对本身被一冒号(:)分隔;
  • 名称为字符串,但值可以是字符串、数字、对象、数据、真/假,或为空。对象可作为名称/值对的组成部分,以便提供嵌入额外JSON对象或在JSON对象内创建函数的能力。
  • 最后由右大括号(})封闭。

  JSON的声明和初始化一步完成,并产生一个单例(singleton)对象。JSON并非创建单例对象的唯一方法,可以通过标准的 Javscript 对象来创建单例对象,只不过做的工作要多一些,与JSON对象的区别在于,不能在一个地方声明,其后可以像一个标准的类来初始化。

  下例是最简单的JSON对象:

var objObject = {};

  上例实际上是下面对象的短格式写法:

var objObject = new Object();

  下面是一JSON对象:包含两个属性 FirstName 和 LastName,其值分别为 Sam 和 Smith:

1.  var objEmployee = {
 2.        "FirstName": "Sam",
 3.         "LastName": "Smith"
 4. };

JavaScript中,通过新创建的对象 objEmployee来简化使用点算子来访问对象属性的问题,如下例所示:

1. alert("The employee’s name is: " + objEmployee.FirstName + " " + objEmployee.LastName);

创建JSON数组

  创建JSON数组:左中括号([)打头,后接逗号分隔的 名称/值对,最后由右中括号(])结尾。

  最简单的JSON数组---空数组句法如下:

1. var arrArray = [];

上例是下例的短格式写法:

1. var arrArray = new Array();

下面是一包含三个字符串的数组:

1. var arrArray = [
 2   ."One",
 3   ."Two",
 4.   "Three"
 5. ];

创建JSON类

  是否创建JSON类,这完全取决于您的否需要。一些人发现JSON类更简单和更容易阅读,我个人不认为JSON类和标准的Javascript类之间的可读性有多大差别。

  如果类中的所有成员和方法在都是public类型的,使用JSON类可能简单一些,因为不需要先声明类,然后再初始化。

  这是因为一个JSON对象在声明时自动初始化,并生成所谓的单例对象:每一声明只获得一个对象。

  JSON类在声明时的自动初始化,如同全局命名空间对象,其中包含一些帮助方法,不要求开发人员在页面中使用某些方法之前初始化该对象(其行为像全局函数,但包含更多结构的类)。

  JSON类的创建同样简单,但不是一个简单的变量或对象,可将一个函数作为 名称/值对 的组成部分,如下例所示:

01.  var Employee = {
 02.    "FirstName": "Sam",
 03.    "LastName": "Smith",
 04.
 05.   // Our method to return the Employee's full name
 06.   "GetFullName": function () {
 07.        return (this.FirstName + " " + this.LastName);
 08.   }
 09.  };
 10. 
 11.  alert(Employee.GetFullName());

将JSON字符串转换成JSON对象

  当从服务器请求JSON数据时,通常返回的是一字符串文本,只要有可能,建议利用本地浏览器支持的方法将字符串解析为一个JSON对象。

  将一字符串转换成一JSON对象,利用本地浏览器对象简单如下:

1.  var sJSON = "{ \"FirstName\": \"Sam\", \"LastName\": \"Smith\" }";
 2.
 3.  var objJSON = JSON.parse(sJSON);
 4.
 5.  alert("JSON object's data: " + objJSON.FirstName + " " + objJSON.LastName);

结论

  JSON使用的是一种有趣的技术,不仅可简化一些任务,同时也有助于减少组件间在因特网上/局域网上传输数据时对带宽的占用,尤其相对于SOAP而言。