JSON 全称“JavaScript Object Notation”,译为“JavaScript 对象简谱”或“JavaScript 对象表示法”,是一种轻量级的、基于文本的、开放的数据交换格式。JSON 在 Web 开发领域有着举足轻重的地位,如果您想在 Web 开发领域大展身手的话,就必须了解 JSON。
数据交换是指,两个设备之间建立连接并互相传递数据的过程。
尽管 JSON 的名称中包含“JavaScript”,但它并不是只能在 JavaScript 中使用,大多数编程语言都支持 JSON(有些本身就支持,有些可以通过第三方库得到支持),例如 JavaScript、Java、PHP、Python、C++ 等。
JSON 是一种纯字符串形式的数据,它本身不提供任何方法(函数),非常适合在网络中进行传输。JavaScript、PHP、Java、Python、C++ 等编程语言中都内置了处理 JSON 数据的方法。
JSON 是基于 JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集,是一种开放的、轻量级的数据交换格式,采用独立于编程语言的文本格式来存储和表示数据,易于程序员阅读与编写,同时也易于计算机解析和生成,通常用于在 Web 客户端(浏览器)与 Web 服务器端之间传递数据。
JSON 并不是唯一能够实现在互联网中传输数据的方式,除此之外还有一种 XML 格式。JSON 和 XML 能够执行许多相同的任务,那么我们为什么要使用 JSON,而不是 XML 呢?
之所以使用 JSON,最主要的原因是 JavaScript。众所周知,JavaScript 是 Web 开发中不可或缺的技术之一,而 JSON 是基于 JavaScript 的一个子集,JavaScript 默认就支持 JSON,而且只要您学会了 JavaScript,就可以轻松地使用 JSON,不需要学习额外的知识。
另一个原因是 JSON 比 XML 的可读性更高,而且 JSON 更加简洁,更容易理解。
与 XML 相比,JSON 具有以下优点:
结构简单、紧凑:与 XML 相比,JSON 遵循简单、紧凑的风格,有利于程序员编辑和阅读,而 XML 相对比较复杂;
更快:JSON 的解析速度比 XML 更快(因为 XML 与 HTML 很像,在解析大型 XML 文件时需要消耗额外的内存),存储同样的数据,JSON 格式所占的存储空间更小;
可读性高:JSON 的结构有利于程序员阅读。
任何事物都不可能十全十美,JSON 也不例外,比如:
只有一种数字类型:JSON 中只支持 IEEE-754 双精度浮点格式,因此您无法使用 JSON 来存储许多编程语言中多样化的数字类型;
没有日期类型:在 JSON 中您只能通过日期的字符串(例如:1970-01-01)或者时间戳(例如:1632366361)来表示日期;
没有注释:在 JSON 中无法添加注释;
冗长:虽然 JSON 比 XML 更加简洁,但它并不是最简洁的数据交换格式,对于数据量庞大或用途特殊的服务,您需要使用更加高效的数据格式。
Object(对象):键/值对(名称/值)的集合,使用花括号{ }
定义。在每个键/值对中,以键开头,后跟一个冒号:
,最后是值。多个键/值对之间使用逗号,
分隔。
{ "website":{ "Name":"zking", "Url":"https://www.veryedu.cn/", "Address":"湖南长沙" } }
注意:所有 JSON 数据需要包裹在一个花括号中,类似于 JavaScript 中的对象。
Array(数组):值的有序集合,使用方括号[ ]
定义,数组中每个值之间使用逗号,
进行分隔。
{ "array":[ { "name":"zking", "url":"https://www.veryedu.cn/", "course":"JSON" }, [ "Java", "C#", "Python" ], "JSON", 18, true ] }
JSON 中数组与对象不同,对象是由若干键/值对组成,而数组则是由若干值构成的。数组中的值可以是 JSON 中的任意类型。
注意:所有 JSON 数据需要包裹在一个花括号中,类似于 JavaScript 中的对象。
JSON 数据是以键/值对(名称/值)的形式书写的,键表示数据的名称,需要以字符串的形式定义(在双引号中定义),后面紧跟一个冒号,最后是值,如下例所示:
"name":"Zking"
类似于 JavaScript 对象中的:
name:"Zking"
JSON 中的值可以是以下数据类型:
数字(整数或浮点数);
字符串(需要在双引号中定义);
布尔值(true 或 false);
数组(在方括号中定义);
对象(在花括号中定义);
null(空)。
另外,在 JSON 中,不同的键/值对之间需要使用逗号进行分隔,如下例所示:
{ "number":200, "float":3.14, "string":"hello zking", "boolean":true, "array":[ "zhangsan", {"name":"lisi", "age": 18}, {"name":"wangwu", "age": 16} ], "object":{ "name":"zking", "url":"https://www.veryedu.cn/" } }
在使用 JSON 时,有以下几点需要注意:
JSON 是一段包裹在花括号中的数据,数据由若干键/值对组成;
键和值之间使用冒号分隔;
不同的键/值对之间使用逗号分隔;
键需要以字符串的形式定义(即使用双引号包裹,注意:不能使用单引号);
值可以是数字、字符串、布尔值、数组、对象、null;
键必须是唯一的,不能重复,否则后定义的键/值对会覆盖前面定义的键/值对;
JSON 中不可以使用八进制或十六进制表示数字。
粗略的看起来,您可能觉得 JSON 就是一个 JavaScript 的对象,但其实不是这样的,JSON 与 JavaScript 对象之间还是有区别的。首先,JSON 是一种数据交换格式,可以跨语言、跨平台使用,它只是与 JavaScript 有些渊源,并不是 JavaScript 的一部分。
就语法而言,JSON 与 JavaScript 最主要的区别就是,JSON 中每个键都必须是一个字符串,而 JavaScript 对象则没有这个限制,如下所示:
// JavaScript 中的对象 { name: "zking" } // JSON { "name": "zking" }
另外,在 JavaScript 对象中,您既可以使用双引号也可以使用单引号,但在 JSON 中只能使用双引号。还有就是 JSON 中没有日期类型,也不能定义注释,所以您只能通过日期的字符串(例如:1970-01-01)或者时间戳(例如:1632366361)来表示日期。
ajax() 方法用于执行 AJAX(异步 HTTP)请求。语法:
$.ajax({name:value, name:value, ... })
参数说明:
名称 | 值/描述 |
---|---|
async | 布尔值,表示请求是否异步处理。默认是 true。 |
beforeSend(xhr) | 发送请求前运行的函数。 |
cache | 布尔值,表示浏览器是否缓存被请求页面。默认是 true。 |
complete(xhr,status) | 请求完成时运行的函数(在请求成功或失败之后均调用,即在 success 和 error 函数之后)。 |
contentType | 发送数据到服务器时所使用的内容类型。默认是:"application/x-www-form-urlencoded"。 |
context | 为所有 AJAX 相关的回调函数规定 "this" 值。 |
data | 规定要发送到服务器的数据。 |
dataFilter(data,type) | 用于处理 XMLHttpRequest 原始响应数据的函数。 |
dataType | 预期的服务器响应的数据类型。 |
error(xhr,status,error) | 如果请求失败要运行的函数。 |
global | 布尔值,规定是否为请求触发全局 AJAX 事件处理程序。默认是 true。 |
ifModified | 布尔值,规定是否仅在最后一次请求以来响应发生改变时才请求成功。默认是 false。 |
jsonp | 在一个 jsonp 中重写回调函数的字符串。 |
jsonpCallback | 在一个 jsonp 中规定回调函数的名称。 |
password | 规定在 HTTP 访问认证请求中使用的密码。 |
processData | 布尔值,规定通过请求发送的数据是否转换为查询字符串。默认是 true。 |
scriptCharset | 规定请求的字符集。 |
success(result,status,xhr) | 当请求成功时运行的函数。 |
timeout | 设置本地的请求超时时间(以毫秒计)。 |
traditional | 布尔值,规定是否使用参数序列化的传统样式。 |
type | 规定请求的类型(GET 或 POST)。 |
url | 规定发送请求的 URL。默认是当前页面。 |
username | 规定在 HTTP 访问认证请求中使用的用户名。 |
xhr | 用于创建 XMLHttpRequest 对象的函数。 |
HTTP 请求:GET vs POST
两种在客户端和服务器端进行请求-响应的常用方法是:GET 和 POST。
GET - 从指定的资源请求数据
POST - 向指定的资源提交要处理的数据
GET 基本上用于从服务器获得(取回)数据。注释:GET 方法可能返回缓存数据。
POST 也可用于从服务器获取数据。不过,POST 方法不会缓存数据,并且常用于连同请求一起发送数据。
$.get() 方法通过 HTTP GET 请求从服务器上请求数据。语法:
$.get(URL,callback); 或 $.get( URL [, data ] [, callback ] [, dataType ] )
URL:发送请求的 URL字符串。
data:可选的,发送给服务器的字符串或 key/value 键值对。
callback:可选的,请求成功后执行的回调函数。
dataType:可选的,从服务器返回的数据类型。默认:智能猜测(可以是xml, json, script, 或 html)。
$.getJSON( )方法函数主要用来从服务器加载json编码的数据,它使用的是GET HTTP请求。语法:
$.getJSON( URL [, data ] [, callback ] )
URL:发送请求的 URL字符串。
data:可选的,发送给服务器的字符串或 key/value 键值对。
callback:可选的,请求成功后执行的回调函数。
$.post() 方法通过 HTTP POST 请求向服务器提交数据。语法:
$.post(URL,callback); 或 $.post( URL [, data ] [, callback ] [, dataType ] )
URL:发送请求的 URL字符串。
data:可选的,发送给服务器的字符串或 key/value 键值对。
callback:可选的,请求成功后执行的回调函数。
dataType:可选的,从服务器返回的数据类型。默认:智能猜测(可以是xml, json, script, 或 html)。