zoukankan      html  css  js  c++  java
  • 你不知道的JSON.stringify知识点

    1. 定义

    stringify 函数的定义: JSON.stringify(value [, replacer [, space]])

    参数:

    • value : 将要转为JSON字符串的javascript对象。
    • replacer :该参数可以是多种类型,如果是一个函数,则它可以改变一个javascript对象在字符串化过程中的行为, 如果是一个包含 String 和 Number 对象的数组,则它将作为一个白名单.只有那些键存在域该白名单中的键值对才会被包含进最终生成的JSON字符串中.如果该参数值为null或者被省略,则所有的键值对都会被包含进最终生成的JSON字符串中。
    • space :该参数可以是一个 String 或 Number 对象,作用是为了在输出的JSON字符串中插入空白符来增强可读性. 如果是Number对象, 则表示用多少个空格来作为空白符; 最大可为10,大于10的数值也取10.最小可为1,小于1的数值无效,则不会显示空白符. 如果是个 String对象, 则该字符串本身会作为空白符,字符串最长可为10个字符.超过的话会截取前十个字符. 如果该参数被省略 (或者为null), 则不会显示空白符

    1.1 替换函数可以用来过滤值

    1. 返回 undefined 表示忽略该属性
    2. 返回字符串,布尔值或则数字将会被 stringify
    3. 返回对象将会触发递归调用知道遇到基本类型的属性
    4. 返回无法 stringify 的值将会被忽略
    let user = {
      age: 18,
      name: 'tom',
      email: 'tom@caonima.com'
    };
     
    function replacer(key, value) {
      if (key === 'email') {
        return undefined;
      }
      return value;
    }
     
    let str = JSON.stringify(user, replacer);
    // "{"age":18,"name":"tom"}"
    
    // 过滤提取数据 
    let data = [
         {name: "tom", sex:1, age: 18},
         {name: "jerry", sex:0, age: 17},
         {name: "mike", test: {age: 15}} // 数组中的嵌套属性会被过滤
     ];
    
    let str = JSON.stringify(data, ["name","age"]);
    console.log(str);
    //[{"name":"tom","sex":1},{"name":"jerry","sex":0},{"name":"mike"}]
    
    // 处理数据
    let str2 = JSON.stringify(data, function(key, val){
        if(key === 'sex'){
            return ['男', '女'][val]
        }
        return val
    })
    console.log(str2);
    // [{"name":"tom","sex":"女","age":18},{"name":"jerry","sex":"男","age":17}]
    

    1.2 使用 JSON.stringify() 做对象序列化

    1. undefined 值、函数或者XML值会被忽略
    2. 如果你的数组当中含有 undefined值,函数或XML值,该数组中的这些值将会被当成 null
    3. 如果属性为 null 则可以正常序列化这个属性(因为 null 可表示已经赋值,而 undefined 表示未定义、未赋值,所以执行 JSON.stringify 不会处理。)
    4. 有些属性无法被 stringify(SON 是一个通用的文本格式,和语言无关。设想如果将函数定义也 stringify 的话,如何判断是哪种语言,并且通过合适的方式将其呈现出来将会变得特别复杂。特别是和语言相关的一些特性,比如 JavaScript 中的 Symbol。)
    let data = {
      name: 'tom',
      age: undefined,
      sex: null,
      fn: function() {
        return true
      }
    }
    JSON.stringify(data)
    // {"name":"tom","sex":null}
    
    // 在数组中,不可被 stringify 的元素用 null 填充
    let arr = [Symbol(), undefined, function() {}, "tom"];
    JSON.stringify(arr);
    // "[null,null,null,'tom']"
    

    注意

    • 不是所有的合法的 JSON 都是有效的 JavaScript
    • JSON 只是一个文本格式
    • JSON 中的数字是十进制
  • 相关阅读:
    关于面试总结8-http协议相关面试题
    关于面试总结7-linux篇
    关于面试总结6-SQL经典面试题
    关于面试总结5-python笔试题(递归)
    关于面试总结4-python笔试题
    关于面试总结3-SQL查询
    关于面试总结2-SQL学生表
    关于面试总结1-SQL学生表
    浅谈多变量线性回归中的数据规范化
    浅谈KL散度
  • 原文地址:https://www.cnblogs.com/codebook/p/11821173.html
Copyright © 2011-2022 走看看