JSON.stringify的几种用法

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

语法: JSON.stringify(value[, replacer[, space]])
参数: value: 必需, 要转换的 JavaScript 值(通常为对象或数组)。 replacer: 可选。用于转换结果的函数或数组。 如果 replacer 为函数,则 JSON.stringify 将调用该函数,并传入每个成员的键和值。使用返回值而不是原始值。如果此函数返回 undefined,则排除成员。根对象的键是一个空字符串:
""。 如果 replacer 是一个数组,则仅转换该数组中具有键值的成员。成员的转换顺序与键在数组中的顺序一样。 space: 可选,文本添加缩进、空格和换行符,如果 space 是一个数字,则返回值文本在每个级别缩进指定数目的空格,如果 space 大于 10,则文本缩进 10 个空格。space 也可以使用非数字,如: 。

JSON.stringify()与JSON.parse()的区别

JSON.stringify()的作用是将 JavaScript 对象转换为 JSON 字符串,而JSON.parse()正好相反,可以将JSON字符串转为一个对象。

JSON.stringify()的妙用

 1.用来调试对象

控制台直接输出对象可能得不到我们想要的结果

const user = {
    "name" : "张三",
    "age" : 18
}
console.log(user);   [object Object]

因为从对象到字符串的默认转换是“[objectObject]”

因此,我们使用 JSON.stringify()先将对象转换为字符串,然后把结果输入 console 控制台

const user = {
"name" : "张三",
"age" : 18
}
console.log(JSON.stringify(user));
// "{ "name" : "张三", "age" :18 }"

 2.存储 localStorage 对象

一些时候,你想存储用户创建的一个对象,并且,即使在浏览器被关闭后仍能恢复该对象。下面的例子是 JSON.stringify  适用于这种情形的一个样板:

// 创建一个示例数据
var session = {
    'screens' : [],
    'state' : true
};
session.screens.push({"name":"screenA", "width":450, "height":250});
session.screens.push({"name":"screenB", "width":650, "height":350});
session.screens.push({"name":"screenC", "width":750, "height":120});
session.screens.push({"name":"screenD", "width":250, "height":60});
session.screens.push({"name":"screenE", "width":390, "height":120});
session.screens.push({"name":"screenF", "width":1240, "height":650});

// 使用 JSON.stringify 转换为 JSON 字符串
// 然后使用 localStorage 保存在 session 名称里
localStorage.setItem('session', JSON.stringify(session));

// 然后是如何转换通过 JSON.stringify 生成的字符串,该字符串以 JSON 格式保存在 localStorage 里
var restoredSession = JSON.parse(localStorage.getItem('session'));

// 现在 restoredSession 包含了保存在 localStorage 里的对象
console.log(restoredSession);

 3.数组去重

function unique(arr) {
  let unique = {};
  arr.forEach(function(item) {
                //调整属性顺序
    var newData = {};
    Object.keys(item).sort().map(key = >{
      newData[key] = item[key]
    })
    unique[JSON.stringify(newData)] = item; //键名不会重复
  })
  arr = Object.keys(unique).map(function(u) {
    //Object.keys()返回对象的所有键值组成的数组,map方法是一个遍历方法,返回遍历结果组成的数组.将unique对象的键名还原成对象数组
    return JSON.parse(u);
  })
  return arr;
}

 4.实现深拷贝

//深拷贝
function deepClone(data) {
    let _data = JSON.stringify(data),
        dataClone = JSON.parse(_data);
    return dataClone;
};

 5.判断数组是否包含某对象,或者判断对象是否相等

//判断数组是否包含某对象
let data = [
    {name:'echo'},
    {name:'前端开发博客'},
    {name:'张三'},
],
val = {name:'张三'};
JSON.stringify(data).indexOf(JSON.stringify(val)) !== -1;//true

//判断两数组/对象是否相等
let a = [1,2,3],
    b = [1,2,3];
JSON.stringify(a) === JSON.stringify(b);//true

暂时就是这些了~

原文地址:https://www.cnblogs.com/jinyu-cnblogs/p/13446527.html