JSON 是一种数据格式,用来表示 JS 中的数据结构(不仅能在 JS 中使用,在其他环境中也可以),通常用于传输数据,例如从服务器发送数据到客户端上使用。其数据结构与 JS 相似,包括 number, string, boolean, array, object。虽然一般看起来像一个 JS 对象,但其他数据类型也存在。

JSON 是以字符串的形式存在的,文件的后缀名是 .json,返回的 MIME type 始终是 application/json。

 

JS 中有一个内置的 JSON 对象,它拥有两个方法,JSON.stringify() 用于把 JS 数据转化成 JSON 数据,JSON.parse() 用于把 JSON 数据转化成 JS 数据。除此之外,这个 JSON 对象没有其他任何作用,不能被调用也不能被当作构造函数来使用。

 

需要注意的几点:

  • JSON 中只包括属性,没有方法;
  • JSON 中的属性名要用 "" (双引号)括起来;
  • JSON 中 '' (单引号)是不合法的;
  • 错置的 : (引号)或 ,(逗号) 可能会使 JSON 不合法;

 

e.g. 怎用获取并使用 JSON 数据?

// 存储URL
var requestURL = "xxx.json";
// 实例化一个网络请求
var request = new XMLHttpRequest();
// 指定请求方法和URL
request.open("GET", requestURL);
// 让 XMLHttpRequest 知道要返回的是 json 文件,并把 JSON 数据转成 JS 对象
request.responseType = "json";
// 发送请求
request.send();
// 处理数据
request.onload = function() {
    // 把返回的已经转为 JS 对象的 JSON 数据赋值给 myObj
    var myObj = request.response;
    // 对得到的对象进行操作
    doSomething(myObj);
};

在上面的代码中,request.responseType = "json"; 让 XHR 请求直接把返回的 JSON 转成了 JS 对象,但有时我们可能得到的不是一个 .json 文件,而是一个 JSON 字符串,这时我们需要使用 JSON.parse() 手动把 JSON 字符串转成 JS 对象。

// 得到的是一个 JSON 字符串
request.responseType = "text";
// 发送请求
request.send();
// 处理数据
request.onload = function() {
    // 得到 JSON 字符串
    var myObjText = request.response;
    // 把 JSON 字符串转为 JS 对象
    var myObj = JSON.parse(myObjText);
    // 对 JS 对象进行操作
    doSomething(myObj);
};