JAVASCRIPT 基础教程
JAVASCRIPT & DOM
JAVASCRIPT & BOM
JAVASCRIPT 高级教程
JAVASCRIPT 示例
JAVASCRIPT 参考

JavaScript JSON 解析

在本教程中,您将学习如何在 JavaScript 中编码和解码 JSON 数据。

什么是 JSON

JSON 代表 JavaScript Object Notation。 JSON 是一种非常轻量级的数据交换格式,用于服务器和客户端之间的数据交换,它可以快速且易于解析和生成。

与 XML 一样,JSON 也是一种基于文本的格式,对于人和计算机来说,它易于编写和理解,但与 XML 不同的是,JSON 数据结构占用的带宽比其 XML 版本要少。 JSON 基于两种基本结构:

  • Object: 这被定义为键/值对的无序集合(即 key:value)。 每个对象都以左大括号 { 开头,并以右大括号 } 结尾。 多个键/值对由逗号 , 分隔。
  • Array: 这被定义为值的有序列表。 数组以左括号 [ 开始,以右括号 ] 结束。 值由逗号 , 分隔。

在 JSON 中,属性名称或键始终是字符串,而值可以是 string, number, truefalse, null 甚至是 objectarray。 字符串必须用双引号 " 括起来,并且可以包含转义字符,例如 \n, \t\。 JSON 对象可能如下所示:

{
    "book": {
        "name": "Harry Potter and the Goblet of Fire",
        "author": "J. K. Rowling",
        "year": 2000,
        "genre": "Fantasy Fiction",
        "bestseller": true
    }
}

而 JSON 数组的示例如下所示:

{
    "fruits": [
        "Apple",
        "Banana",
        "Strawberry",
        "Mango"
    ]
}

提示: 数据交换格式是一种文本格式,用于在不同平台和操作系统之间交换或交换数据。 JSON 是 Web 应用程序中最流行和最轻量级的数据交换格式。


在 JavaScript 中解析 JSON 数据

在 JavaScript 中,您可以使用 JSON.parse() 方法轻松解析从 Web 服务器接收到的 JSON 数据。 此方法解析 JSON 字符串并构造字符串描述的 JavaScript 值或对象。 如果给定的字符串不是有效的 JSON,您将收到语法错误。

假设我们从 Web 服务器接收到以下 JSON 编码的字符串:

{"name": "Peter", "age": 22, "country": "United States"}

现在,我们可以简单地使用 JavaScript JSON.parse() 方法将此 JSON 字符串转换为 JavaScript 对象,并使用点符号 (.) 访问各个值,例如 这个:

// Store JSON data in a JS variable
var json = '{"name": "Peter", "age": 22, "country": "United States"}';

// 将 JSON 编码的字符串转换为 JS 对象
var obj = JSON.parse(json);

// 从 JS 对象访问单个值
alert(obj.name); // 输出: Peter
alert(obj.age); // 输出: 22
alert(obj.country); // 输出: United States

请查看 PHP JSON 解析 的教程,了解如何从 Web 服务器返回 JSON 数据作为响应,以及 ,如何使用 PHP 在服务器端对 JSON 数据进行编码/解码。


在 JavaScript 中解析嵌套的 JSON 数据

JSON 对象和数组也可以嵌套。 一个 JSON 对象可以任意包含其他 JSON 对象、数组、嵌套数组、JSON 对象数组等。 以下示例将向您展示如何解析嵌套的 JSON 对象并提取 JavaScript 中的所有值。

/* 将多行 JSON 字符串存储在 JS 变量中
使用新的 ES6 模板文字 */
var json = `{
    "book": {
        "name": "Harry Potter and the Goblet of Fire",
        "author": "J. K. Rowling",
        "year": 2000,
        "characters": ["Harry Potter", "Hermione Granger", "Ron Weasley"],
        "genre": "Fantasy Fiction",
        "price": {
            "paperback": "$10.40", "hardcover": "$20.32", "kindle": "$4.11"
        }
    }
}`;

// 将 JSON 对象转换为 JS 对象
var obj = JSON.parse(json);

// 定义递归函数以打印嵌套值
function printValues(obj) {
    for(var k in obj) {
        if(obj[k] instanceof Object) {
            printValues(obj[k]);
        } else {
            document.write(obj[k] + "<br>");
        };
    }
};

// 打印结果对象的所有值
printValues(obj);

document.write("<hr>");

// 打印单个值
document.write(obj["book"]["author"] + "<br>");  // Prints: J. K. Rowling
document.write(obj["book"]["characters"][0] + "<br>");  // Prints: Harry Potter
document.write(obj["book"]["price"]["hardcover"]);  // Prints: $20.32

在 JavaScript 中将数据编码为 JSON

有时,您的代码中的 JavaScript 对象或值需要在 Ajax 通信期间传输到服务器。 JavaScript 为此提供了 JSON.stringify() 方法,该方法将 JavaScript 值转换为 JSON 字符串,如下所示:

字符串化 JavaScript 对象

以下示例将向您展示如何将 JavaScript 对象转换为 JSON 字符串:

// 示例 JS 对象
var obj = {"name": "Peter", "age": 22, "country": "United States"};

// 将 JS 对象转换为 JSON 字符串
var json = JSON.stringify(obj);
alert(json);

上面示例的输出将如下所示:

{"name":"Peter","age":22,"country":"United States"}

注意:虽然,JavaScript 和 JSON 对象看起来很相似,但它们并不完全相同。 例如,在 JavaScript 中,对象属性名称可以用单引号 ('...') 或双引号 ("...") 括起来,或者您可以完全省略引号。 但是,在 JSON 中,所有属性名称都必须用双引号引起来。

字符串化 JavaScript 数组

同样,您可以将 JavaScript 数组转换为 JSON 字符串,如下所示:

// Sample JS array
var arr = ["Apple", "Banana", "Mango", "Orange", "Papaya"];

// 将 JS 数组转换为 JSON 字符串
var json = JSON.stringify(arr);
alert(json);

上面示例的输出将如下所示:

["Apple","Banana","Mango","Orange","Papaya"]

警告: 不要使用 eval() 函数来评估 JSON 数据(例如,在 JSON 字符串中包含函数定义并使用 eval() 方法将它们转换回可执行函数),因为它允许攻击者将恶意 JavaScript 代码注入您的应用程序。

Advertisements