对JSON数据的操作处理,我们通常会使用到JSON.parse()和JSON.stringify()方法。

JSON.parse()

JSON.parse()方法用于将一个JSON字符串转换为对象。

语法

JSON.parse(text[, reviver]);

参数说明

text:必需,一个有效的JSON字符串。

reviver:可选,一个转换结果的函数,将为对象的每个成员调用该函数。

返回值

返回给定JSON字符串转换后的对象。

JSON.stringify()

JSON.stringify()方法用于将JavaScrip值转换为JSON字符串。

语法

JSON.stringify(value[, replacer[, space]])

参数说明

value:必需,要转换的JavaScript值(通常为对象或数组)

replacer:可选,用于转换结果的函数或数组。

如果replacer为函数,则JSON.stringify将调用该函数,并传入每个成员的键和值。使用返回值而不是原始值。如果此函数返回undefined,则排除成员。根对象的键是一个空字符串:“”。

如果replacer是一个数组,则仅转换该数组中具有键值的成员。成员的转换顺序与键在数组中的顺序一样。

space:可选,文本添加缩进、空格和换行符,如果space是一个数字,则返回值文本在每个级别缩进指定数目的空格,如果space大于10,则文本缩减10个空格。space也可以使用非数字,如:\t。

返回值

返回包含JSON文本的字符串。

使用场景

判断数组/对象是否相等

let a = [1,2,3];
let b = [1,2,3];
JSON.stringify(a) === JSON.stringify(b); // true

将对象存储到localStorage/sessionStorage中

let a = {a:1,b:2,c:3};
localStorage.setItem(JSON.stringify(a));

深度拷贝对象

let a = {a:1,b:2,c:3};
let b = JSON.parse(JSON.stringify(a));

异常情况

使用JSON.parse解析json字符串时,如果字符串中包含换行符,则会报错。

pc浏览器去除\n的方法:

let a = str.replace(/\n/g, '');

移动端浏览器去除\n方法:

let a = str.replace(/\\n/g, '');

换行符还有可能是\r\n,\n\r等。