zoukankan      html  css  js  c++  java
  • 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

    暂时就是这些了~

  • 相关阅读:
    Jenkins+Tomcat+svn+maven自动化构建简单过程
    Eclipse常用的6个Debug技巧
    在linux服务器上发布web应用的完整过程
    【转】解决response.AddHeader("Content-Disposition", "attachment; fileName=" + fileName) 中文显示乱码
    springmvc缓存和mybatis缓存
    springmvc文件上传和下载
    博客园API
    整理一下CoreGraphic和Quartz2D的知识(二)
    整理一下CoreGraphic和Quartz2D的知识(一)
    CGPoint和CGSize以及CGRect的一些方法~
  • 原文地址:https://www.cnblogs.com/jinyu-cnblogs/p/13446527.html
Copyright © 2011-2022 走看看