Skip to content

JSON 如何使用

JSON 常用于在服务器和 Web 应用程序之间交换数据。JavaScript 提供了内置方法来有效且安全地处理 JSON 数据。

当您收到 JSON 数据时,它通常是字符串形式 (例如,来自 Web 服务器或文件)。您需要将其转换为 JavaScript 对象或数组才能访问其中的数据。

执行此操作的标准且安全的方法是使用内置的 JSON.parse() 方法。

考虑一个代表员工数据的 JSON 字符串:

const jsonString = '{
"department": "Engineering",
"employees": [
{ "firstName": "Alice", "lastName": "Green" },
{ "firstName": "Bob", "lastName": "Smith" }
]
}';

使用 JSON.parse() 将此字符串转换为 JavaScript 对象:

try {
const dataObject = JSON.parse(jsonString);
// 现在您可以像访问常规 JavaScript 对象一样访问数据
console.log(dataObject.department); // 输出: Engineering
console.log(dataObject.employees[0].firstName); // 输出: Alice
console.log(`There are ${dataObject.employees.length} employees.`); // 输出: There are 2 employees.
} catch (error) {
// 处理潜在的解析错误 (如果 jsonString 不是有效的 JSON)
console.error("Error parsing JSON string:", error);
}

重要提示: 如果输入字符串不是有效的 JSON,JSON.parse() 会抛出错误。处理外部数据时,建议将其放在 try...catch 块中。

要将数据发送到服务器或将其存储为纯文本格式,您通常需要将 JavaScript 对象或数组转换为 JSON 字符串。

JSON.stringify() 方法负责此转换。

示例:将对象转换为 JSON 字符串

Section titled “示例:将对象转换为 JSON 字符串”
const userProfile = {
id: 101,
username: "coderGal",
email: "coder@example.com",
isActive: true,
lastLogin: new Date() // 日期会被转换为 ISO 字符串格式
};

使用 JSON.stringify() 将此对象转换为 JSON 字符串:

const jsonOutputString = JSON.stringify(userProfile);
console.log(jsonOutputString);
// 输出可能如下所示:
// {"id":101,"username":"coderGal","email":"coder@example.com","isActive":true,"lastLogin":"2023-10-27T10:30:00.000Z"}

JSON.stringify() 还可以接受可选参数来控制格式化 (缩进) 和过滤属性。

带缩进的示例:

const formattedJsonString = JSON.stringify(userProfile, null, 2); // 使用 2 个空格进行缩进
console.log(formattedJsonString);
// 输出:
// {
// "id": 101,
// "username": "coderGal",
// "email": "coder@example.com",
// "isActive": true,
// "lastLogin": "2023-10-27T10:30:00.000Z"
// }

注意: JSON.stringify() 会忽略函数、undefined 值和 Symbol 属性。它会将 Date 对象转换为其 ISO 8601 字符串表示形式。

过去,在 JSON.parse() 广泛可用之前,有时会使用 JavaScript 的 eval() 函数来解析 JSON 字符串。这是极其危险的,绝不应该这样做。

!安全风险: eval() 会执行传递给它的任何 JavaScript 代码。如果 JSON 字符串来自不受信任的来源,它可能包含恶意代码,eval() 将会执行这些代码,这可能会窃取数据或损害用户的系统。

始终使用 JSON.parse() 来解析 JSON 数据。 它专门为此目的设计,并且只解析数据而不执行代码,因此非常安全。

JSON.parse() 已成为 JavaScript 的标准,并多年来得到所有现代浏览器的支持。不再需要使用像 eval() 这样的旧的变通方法。

关于这些方法的更多详细信息,请参阅 MDN Web Docs: JSON 对象。