JavaScript JSON.parse() 方法

JavaScript JSON.parse() 语法

JSON.parse() 是 JavaScript 中 JSON 对象的一个静态方法,它用于将一个 “JSON 字符串” 转换为 “JavaScript 对象” 或 “JavaScript 数组” 。

语法:

JSON.parse(text, reviverFn)

说明:

JSON.parse() 方法接收以下 2 个参数。

  • value(必选):是一个 “JSON 字符串” 。
  • reviverFn(可选):是一个函数,用于在返回最终结果前,对解析出的每个属性的值进行操作。

其中,reviverFn 函数有 2 个参数:属性名(key)和属性值(value),语法如下所示。

JSON.parse(text, (key, value) => {
    ……
})

如果 reviverFn 函数返回 undefined 或没有返回值,那么该属性会从对象中删除;如果 reviverFn 函数有返回值且返回值不是 undefined,那么该属性的值将会被新的返回值取代。

提示: JSON.stringify() 和 JSON.parse() 互为相反操作。

JavaScript JSON.parse() 摘要

属于 JavaScript JSON 对象
使用频率
改变原字符串
官方文档 查看
MDN 查看

JavaScript JSON.parse() 示例

接下来,我们通过几个简单的例子来讲解一下 JavaScript JSON.parse() 方法是如何使用的。

示例 1:JSON.parse() 基本用法

// 对象
const strObj = '{"name": "Laptop","price": 5000,"isPublished": true}';
const obj = JSON.parse(strObj);
console.log(obj);
console.log(typeof obj);

// 数组
const strArr = '[10, 20, 30, 40, 50]';
const arr = JSON.parse(strArr);
console.log(arr);
console.log(Array.isArray(arr));

运行结果如下。

{ name: 'Laptop', price: 5000, isPublished: true }
object
[ 10, 20, 30, 40, 50 ]
true

分析:

如果字符串是一个 “JSON 对象” 格式的字符串,那么 JSON.parse() 会将其解析成一个 JavaScript 对象。如果字符串是一个 “JSON 数组” 格式的字符串,那么 JSON.parse() 会将其解析成一个 JavaScript 数组。

此外,Array.isArray() 是 Array 对象的一个静态方法,用于判断某个值是否为一个数组。

示例 2:使用 reviverFn 函数过滤属性

const strObj = '{"name": "Laptop","price": 5000,"isPublished": true}';
const obj = JSON.parse(strObj, (key, value) => {
    // 如果属性名是 "isPublished",则返回 undefined(此时该属性会被删除)
    if (key === "isPublished") {
        return undefined;
    }
    // 保持其他值不变
    return value;
});
console.log(obj);

运行结果如下。

{ name: 'Laptop', price: 5000 }

分析:

在 reviverFn 函数中,如果我们对某个属性返回 undefined,那么此时 JSON.parse() 会将该属性从最终的对象中移除。

示例 3:使用 reviverFn 函数改变指定值

const strObj = '{"name": "Laptop","price": 5000,"isPublished": true}';
const obj = JSON.parse(strObj, (key, value) => {
    // 如果属性名是 "price"
    if (key === "price") {
        return value * 2;
    }
    // 保持其他值不变
    return value;
});
console.log(obj);

运行结果如下。

{ name: 'Laptop', price: 10000, isPublished: true }

分析:

在 reviverFn 函数中,我们也可以针对某个属性来进行操作。比如在这个例子中,我们在使用 JSON.parse() 反序列化的同时,还将 price 的值变为原来的 2 倍。

JavaScript JSON.parse() 应用场景

在实际项目开发中,JSON.stringify() 和 JSON.parse() 这两个方法,一般都是搭配一起使用的,它们主要用于以下 4 种场景:

  • 数据传输:比如将 JavaScript 对象转换为 JSON 字符串,然后通过 AJAX 发送给服务器。
  • 本地存储:比如将 JavaScript 对象存储到浏览器的 localStorage 或 sessionStorage 中(因为它们只能存储字符串)。
  • 深拷贝(有限制):我们可以通过 JSON.parse(JSON.stringify(object)) 这种方式来实现对象的深拷贝。不过这种方式无法复制函数、undefined 值、Date 对象 等特殊类型。
  • 比较对象:我们可以将两个对象转换为 JSON 字符串,然后比较对应的字符串是否相等,从而判断两个对象是否包含相同的属性和值(但属性顺序可能不同)。
给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号