Ajax全解 - JSON

JSON没出现之前,我们在服务器和服务器之间通信使用的XML,但是XML结构冗余,解析困难,需要使用DOM操作的方式来进行解析,如下所示:

var xhr = new XMLHttpRequest();
//..省略其他ajax步骤
var xml = xhr.responseXML;
//假如XML结构是下面这样的
<member>
    <name>suliang</name>
    <age>25</age>
</member>
console.log(xml.getElementsByTagName("name")[0].firstChild.nodeValue);  //suliang

XMLHttpRequest对象的名字就可以得出它最早是以XML的形式进行数据响应的。 
JSON的出现很好的解决了XML的这两个缺点。JSONJavaScript的一个严格子集,利用了JavaScript中的一些模式来表示结构化数据。关于JSON,最重要的是要理解它是一种数据格式,不是一种编程语言。虽然具有相同的语法形式,但是JSON并不从属于JavaScript,而且,并不是只有JavaScript才使用JSON,很多编程语言都有JSON的解析器和序列化器。从JSON官网上可以查找到各个编程语言对JSON的实现,点这里

语法

JSON的语法可以表示以下几种类型的值

  1. 简单值
  2. 对象
  3. 数组

注:JSON不支持变量 函数 对象实例等数据类型。

简单值

最简单的JSON数据形式就是简单值,例如下面这些值就是有效的JSON数据

 5  //数值
 "suliang"  //字符串,必须双引号,单引号报错
 true  //布尔值也是合法的,不过JSON更多用来表示更复杂的数据结构
对象

JSON中的对象字面量和JavaScript中的对象有些不同,例如下面是一个标准的JavaScript对象:

var person = {
    name:"suliang",
    age:25
};

如果使用JSON对象字面量来表示上面的对象要写成下面这样:

{
    "name":"suliang",
    "age":25
}

属性名一定要严格使用双引号来包起来,哪怕使用单引号都会报错。所以为了统一,我们在定义JavaScript对象的时候就其实可以像下面这样定义:

var person = {
    "name":"suliang",
    "age":25
};

另外JSON字符串不是JavaScript语句,所以末尾不能加; 
JSON的属性值可以是简单类型值也可以是复杂类型值,也就是说可以 可以将一个对象赋值给一个属性。同样需要注意的是对象中的属性名必须用双引号包起来,如下所示:

{
    "number":25,
    "personal":{
        "name":"suliang",
        "job":"软件工程师",
        "location":"杭州-浙江"
    }
}
数组

JSON中同样可以使用JavaScript中的数组字面量形式,例如JavaScript数组字面量是这样的:

var arr = ["suliang",25,true];

JSON中我们可以使用同样的语法表示一个数组:

["suliang",25,true]

将数组和对象结合起来可以构成更复杂的数据集合,如下:

{
    "nember":25,
    "personal":{
        "name":"suliang",
        "age":25,
        "flag":["HTML","CSS","JavaScript"]
    }
}

我们可以借助一些现成的工具来校验自己写的JSON是不是合法,同样还可以格式化JSON点这里

解析与序列化

由于JSON拥有和JavaScript类似的语法,所以我们在将JSON转换成JavaScript对象之后可以使用访问对象的方式对其进行访问。例如上面那个JSON例子我们可以按照下面的方式来获取”JavaScript”这个字符串:

person.personal.flag[2]

相比文章开头的需要获取XMLDOM结构方式要来得简单得多。

JSON对象

早期我们在解析JSON的时候使用的是evel()函数,但是使用该函数会存在一定的风险,所以现在早已弃之不用了。ECMAScript 5定义了全局对象JSON来解析JSON,对现代浏览器支持比较好,但是对IE浏览器而言只支持IE8+。 
JSON对象有如下两个方法:

stringify() 将JavaScript对象序列化成JSON字符串 
parse() 将JSON字符串解析成JavaScript对象

如下所示:

var obj = {
    "nember":25,
    "personal":{
        "name":"suliang",
        "age":25,
        "flag":["HTML","CSS","JavaScript"]
    }
}
var objStr = JSON.stringify(obj);
console.log(objStr);

Chrome浏览器结果如下:


IE8浏览器结果如下:


IE8以下版本的浏览器不支持JSON对象,控制台会报错,如下所示:


需要注意的一点是,使用stringify方法序列化的JSON字符串不包含任何形式的缩进和空格。另外,对象中的所有函数和原型成员都会被忽略。

与序列化相反的是将一个JSON字符串解析成JavaScript对象,如下所示:

var objstr = ‘{"nember":25,"personal":{"name":"suliang","age":25,"flag":["HTML","CSS","JavaScript"]}}‘;
var obj = JSON.parse(objstr);
console.log(obj);

结果如下所示:


 
如果传给JSON.parse()的不是一个有效的JSON字符串的话就会抛出一个语法错误

在不支持JSON对象的浏览器中我们可以在上面给出的JSON官网中下载json2.js文件并引入项目,这样就可以顺利使用JSON对象来进行序列化和解析了。

时间: 2024-11-08 03:28:52

Ajax全解 - JSON的相关文章

POST &amp;amp; GET &amp;amp; Ajax 全解

GET&POST&Ajax 全解 一.POST和GET的差别 GET:GET方法提交数据不安全,数据置于请求行.客户段地址栏可见:GET方法提交的数据限制大小在255个字符之内.參数直接跟在URL后面清晰可见,该http请求的body部分也是空的.仅仅有head部分显示了一个http的基本信息. POST:POST方法提交的数据置于消息主体内,client不可见,POST提交的数据大小没有限制. POST方式发送的http请求,參数不是跟在URL后面的,而是存放在http请求的body部分

jQuery Ajax 全解析

jQuery Ajax 全解析 本文地址: jQuery Ajax 全解析 本文作者:QLeelulu 转载请标明出处! jQuery确实是一个挺好的轻量级的JS框架,能帮助我们快速的开发JS应用,并在一定程度上改变了我们写JavaScript代码的习惯. 废话少说,直接进入正题,我们先来看一些简单的方法,这些方法都是对jQuery.ajax()进行封装以方便我们使用的方法,当然,如果要处理复杂的逻辑,还是需要用到jQuery.ajax()的(这个后面会说到). 1. load( url, [d

jQuery Ajax详解

jQuery Ajax 全解析 本文地址: jQuery Ajax 全解析 本文作者:QLeelulu 转载请标明出处! jQuery确实是一个挺好的轻量级的JS框架,能帮助我们快速的开发JS应用,并在一定程度上改变了我们写JavaScript代码的习惯. 废话少说,直接进入正题,我们先来看一些简单的方法,这些方法都是对jQuery.ajax()进行封装以方便我们使用的方法,当然,如果要处理复杂的逻辑,还是需要用到jQuery.ajax()的(这个后面会说到). 1. load( url, [d

ajax全接触

Ajax 全接触 概念介绍 异步: 指某段程序执行时不会阻塞其他程序执行,其表现形式为程序的执行顺序不依赖程序本 身的书写程序,相反则为同步.其优势在于不阻塞程序的执行,从而提升整体执行效率. 实现异步的大致流程: 运用HTML和CSS来实现页面,表达信息 运用XMLHttpRequest和web服务器进行数据的异步交换 运用JavaScript操作DOM,实现动态局部刷新. http:使计算机通过网络进行通信的规则. 是一种无状态的协议.也就是不建立持久的链接. http请求的过程: 建立TC

你不知道的RabbitMQ集群架构全解

RabbitMQ系列文章 RabbitMQ在Ubuntu上的环境搭建 深入了解RabbitMQ工作原理及简单使用 RabbitMQ交换器Exchange介绍与实践 RabbitMQ事务和Confirm发送方消息确认--深入解读 使用Docker部署RabbitMQ集群 你不知道的RabbitMQ集群架构全解 前言 本文将系统的介绍一下RabbitMQ集群架构的特点.异常处理.搭建和使用中要注意的一些细节. 知识点 一.为什么使用集群? 二.集群的特点 三.集群异常处理 四.集群节点类型 五.集群

Ajax详解及使用Ajax时的返回值类型有哪些?

Ajax详解 Ajax = 异步 JavaScript 和 XML. Ajax 是一种用于创建快速动态网页的技术. 通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新. 传统的网页(不使用 Ajax)如果需要更新内容,必需重载整个网页面. (注:图片来自网络) 如何使用Ajax技术 首先,需要获取XMLHttpRequest对象: var xhr; xhr = new XMLHttpRequest(); XMLH

Ajax调用返回json,xml数据类型(0517--pm)

一.返回Json型数据: 1.主页面 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <met

Servlet获取ajax传递的json值

Servlet获取ajax传递的json值 其实标题可直接写为“记一件愚蠢的事”.另外声明这是只是一篇水文. 原本都用SpringMVC和ajax进行前后台的交互,今天打算试试用原始的Servlet与其进行交互. 起初是打算实现一个跳转(虽然感觉没什么意义): Action如下: package per.zww.ajax.action; import java.io.IOException; import javax.servlet.ServletException; import javax.

[ajax 学习笔记] json数据格式

之前写过ajax传送数据可以用普通文本和XML两种格式.这里记一下json数据格式. json:javascript object notation. 之前分析过,用文本和XML传送数据各有优劣.而json可以轻松地将javascript对象转换成可以随时发送的数据. 一个json数据例子: var people = { "programmers": [ { "firstName": "Brett", "lastName":&