JavaScript JSONLOGIN

JavaScript JSON

JavaScript JSON

向服务器发出Ajax请求时,可以以两种不同的方式从服务器响应检索数据:一种是使用XMLHttpRequest对象的reponseXML属性访问XML格式的数据;一种是XMLHttpRequest对象的responseText属性访问字符串格式的数据。当前,XML是进行数据传输的标准语言,但是使用XML的缺点之一是很难对它进行解析并提取要添加到页面的数据。
      JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,我们称之为JavaScript对象表示法。使用JSON进行数据传输的优势之一是JSON实际上就是JavaScript。它基于ECMAScript第3版中JavaScript对象字面量语法子集的一种文本格式。这表示可以使用responseText从服务器中检索JSON数据,然后再使用JavaScript的eval()方法将JSON字符串转换成JavaScript对象,那么,使用附加JavaScript就可以很地从该对象中提取数据,而不需要处理DOM。
      另外,也有针对大部分编程语言(包括C++,C#,ColdFusion、Java、Perl、PHP和Python)的JSON库,这些库能将上述语言格式化数据转换成JSON格式。

      尽管有许多宣传关于XML如何拥有跨平台,跨语言的优势,然而,除非应用于Web Services,否则,在普通的Web应用中,开发都经常为XML的解析作秀了脑筋,无论是服务器端生成或处理XML,还是客户端用JavaScript解析XML,都常常导致复杂的代码,极低的开发效率。实际上,对于大多数Web应用来说,根本不需要要复杂的XML来传输数据,XML的扩展性很少具有优势,许多Ajax应用甚至直接返回HTML片段来构建动态Web页面。和返回XML并解析它相比,返回HTML片段大大降低了系统的复杂性,但同时缺少了一定的灵活性。XML使用元素、属性、实体和其他结构。JSON不是文档格式,因此它不需要这些附加结构。因为JSON数据只包括“名-值”对(对象)或值(数组),所以JSON数据比同等的XML数据占用更少的空间,执行速度更快。
      (一)JSON语法 
      JSON建构于两种结构:
      对象——名称/值对的集合。不同的语言中,它被理解为对象,纪录,结构,字典,哈希表,有键列表(keyed list),或者关联数组。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。
      数组——值的有序列表。在大部分语言中,它被理解为数组。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。
      JSON没有变量或其他控制结构。JSON只用于数据传输。
      JSON语法是基于对面字面量和数组字面量的JavaScript语法。当使用字面量时,将包括数据本身,但不包括生成数据的表达式。
      1、 数据类型
      JSON数据结构包含以下数据类型:字符、数字、布尔值(true/false)、null、对象,数组。
      JSON字符串必须使用双引号括起来。它们使用标准的JavaScript转义序列。因此在以下列字符的前面要添加一个反斜线:
      JSON具有以下这些形式:”(引号)、b(空格)、n(新行)、f(换页)、r(回车)、t(水平定位)、u(为Unicode字符增加4个数位)、(反斜线符号)、/(正斜杠符号)。
      2、对象字面量
      JSON使用字面量来表示对象,如果有一个以上的成员对象,则在JSON中,可以将其表示为一个包含拥有两个对象的数组的对象。下列代码显示JOSN文本形式的member对象:
   

   {“memeber”:[
            {
                  “name”:”Tom”,
                  “age”:22,
                  “country”:”USA”
      },
      {
                  “name”:”WangMing”,
                  “age”:25,
                  “country”:”China”
      }
      ]
      }

      3、使用JSON解析器
      可以使用JSON解析器从对象和数组中创建JSON文本或者JSON文本中创建对象和数组。JSON站占www.json.rog/json.js上提供有JSON解析器,通过将下列代码加入到页面的头部上即可使用。JSON解析器提供了两个函数:toJSONString()和parseJSON()。
      toJSONString()方法被添加到JavaScript Object和Array定义中,该方法能将JavaScript对象或数组转换成JSON文本。不必将对象或数组转换成字面量就能使用该方法。
      parseJSON()方法能从JSON文本中创建对象或数组。
      (二)使用XMLHttpRequest对象创建JSON数据请求
      1、创建请求
      如果直接请求服务器上一个JSON文件中的JSON数据,则可以利用文件名来请求JSON文件。
      respone.open(“GET”,”classes.txt”,true);
      在这种情况下,classes.txt是JSON数据文件的名称,request是创建用来存放XMLHttpRequest对象的变量。
      2、 解析响应
      一旦接受服务器的JSON数据,就可以采用两种不同的方式解析该响应。可以使用JavaScript的内置函数eval(),或者为了进一步的安全,使用JSON解析器代替。
      eval()方法可以把JavaScript字符串当作参数,还可以将该字符串转换成对象,或作为命令动作。如果使用XMLHttpRequest对象的responseText属性请求JSON数据,那么使用eval()将JSON文本字符串转换成JavaScript对象。因为JSON字符串常包包含花括号,所以用圆括号来括住JSON字符串,以表明字它是一个求值表达式,而不是一个要运行的命令。
      var jsonResp=request.responseText;
      jsonResp=eval(“(”+jsonResp+”)”);
      如果Web服务器既提供JSON数据也提供请求页面,则适合选用eval()方法。如果涉及安全,则适合使用JSON解析器。JSON解析器只作用于JSON文本,并且不执行其他JavaScript。在这种情况下,可以使用responseText,但要使用parseJSON()方法将JSON文本字符串转换成JavaScript对象。要访问parseJOSN函数,需要要添加引用json.js文件到页面中。
      var jsonResp=request.responseText;
      jsonResp=jsonResp.parseJSON();
      下面以实例来说明在JavaScript中简单使用JSON:
    

  <script type="text/javascript">
      var user =[
      {
            "name":”shenmiweiyi”,
            "QQ":306451129,
            "email":”shenmiweiyi@163.com”
            "address":
            [
                  {"City":"ZhengZhou","ZipCode":"450000"},
                  {"City":"BeiJing","ZipCode":"100000"}
            ]
      },
      {
            "name":”kehao”,
            "QQ":254892313,
            "email":”kehao@163.com”
            "address":
            [
                  {"City":"ShangHai","ZipCode":"200000"},
                  {"City":"GuangZhou","ZipCode":"510000"}
            ]
       }
      ]
      alert(user[0].name+”的Email是:”user[0].email);  //outputs shenmiweiyi的Email是:shenmiweiyi@163.com
       alert(user[1].name+”住在:”user[1].address[0].city) //outputs kehao住在:ShangHai
</script>

      JSON已经是JavaScript标准的一部分。目前,主流的浏览器对JSON支持都非常完美,应用JSON,我们可以从XML的解析中摆脱出来,对那些应用Ajax的Web2.0网站来说,JSON确实是目前最灵活的轻量级方案。

JSON 格式化后为 JavaScript 对象

JSON 格式在语法上与创建 JavaScript 对象代码是相同的。

由于它们很相似,所以 JavaScript 程序可以很容易的将 JSON 数据转换为 JavaScript 对象。

JSON 语法规则

数据为 键/值 对。

数据由逗号分隔。

大括号保存对象

方括号保存数组

JSON 数据 - 一个名称对应一个值

JSON 数据格式为 键/值 对,就像 JavaScript 对象属性。

键/值对包括字段名称(在双引号中),后面一个冒号,然后是值:

"firstName":"John"

JSON 对象

JSON 对象保存在大括号内。

就像在 JavaScript 中, 对象可以保存多个 键/值 对:

{"firstName":"John", "lastName":"Doe"}

JSON 数组

JSON 数组保存在中括号内。

就像在 JavaScript 中, 数组可以包含对象:

"employees":[
    {"firstName":"John", "lastName":"Doe"}, 
    {"firstName":"Anna", "lastName":"Smith"}, 
    {"firstName":"Peter", "lastName":"Jones"}
]

在以上实例中,对象 "employees" 是一个数组。包含了三个对象。

每个为个对象为员工的记录(姓和名)。

JSON 字符串转换为 JavaScript 对象

通常我们从服务器中读取 JSON 数据,并在网页中显示数据。

简单起见,我们网页中直接设置 JSON 字符串 (你还可以阅读我们的 JSON 教程):

首先,创建 JavaScript 字符串,字符串为 JSON 格式的数据:

var text = '{ "employees" : [' +
'{ "firstName":"John" , "lastName":"Doe" },' +
'{ "firstName":"Anna" , "lastName":"Smith" },' +
'{ "firstName":"Peter" , "lastName":"Jones" } ]}';

然后,使用 JavaScript 内置函数 JSON.parse() 将字符串转换为 JavaScript 对象:

var obj = JSON.parse(text);


下一节
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <h2>为 JSON 字符串创建对象</h2> <p id="demo"></p> <script> var text = '{"employees":[' + '{"firstName":"John","lastName":"Doe" },' + '{"firstName":"Anna","lastName":"Smith" },' + '{"firstName":"Peter","lastName":"Jones" }]}'; obj = JSON.parse(text); document.getElementById("demo").innerHTML = obj.employees[1].firstName + " " + obj.employees[1].lastName; </script> </body> </html>
提交重置代码
章节课件