乐趣区

关于javascript:JSONstringify的三个参数

前端对象转字符串能够应用 JSON.stringify,其中 stringify 除了传入 obj,还能够额定的传入两个参数。

第一个参数

var data = {name:"niuzai",info:{age:18,sex:"male"}};

JSON.stringify(data); //{"name":"niuzai","info":{"age":18,"sex":"male"}}

应用 JSON.stringify 的时候有两点须要留神,第一点是不能保障程序,第二点是函数不会被序列化

第二个参数

第二个参数能够是回调函数 replacer 或者数组

回调函数

var data = {
  name:"niuzai",
  info:{
    age:18,
    sex:"male"
  }
};

JSON.stringify(data, function(key, val){console.log("key is %s", key);
  console.log("val is %s", typeof(val));
  return val;
});
//key is
//val is object
//key is name
//val is string
//key is info
//val is object
//key is age
//val is number
//key is sex
//val is string
"{"name":"niuzai","info":{"age":18,"sex":"male"}}"

tips:如果对象中含有 Set、Map 之类的数据,序列化后会变成 {},咱们能够在 replacer 回调函数中将其转换,不可转换的状况请参考 MDN

数组

在数组中的字段才会被序列化

JSON.stringify(data, ["name", "info", "sex"]);

// age 因为不在列表里,所以没被序列化
// "{"name":"niuzai","info":{"sex":"male"}}"

第三个参数

第三个参数能够用来格式化转换之后的成果,比方想格式化之后想放弃原来的缩进,那么能够加个数字 2 或者 4,最多 10 个,也能够跟字符串 (蕴含制表符或者换行符之类)

JSON.stringify(data,null,10);
// 每一个层级比上一个多 10 个空格
"{"name":"niuzai","info": {"age": 18,"sex":"male"}
}"JSON.stringify(data,null,'\t');
// 每一个层级比上一个多一个制表符
"{"name":"niuzai","info": {"age": 18,"sex":"male"}
}"
退出移动版