不言而喻,JSON.stringify()
是用来将合法的JSON数据字符串化的!然而在正常的工做中咱们用到的只是最基础的功能;今天咱们就探索不同的JSON.stringify()
。数组
JSON.stringify(2) // "2"
JSON.stringify("2") // ""2"" (含有双引号的字符串)
JSON.stringify(null) // "null"
JSON.stringify(true) // "true"
复制代码
全部安全的JSON值(JSON-safe)均可以使用JSON.stringify()
字符串化。安全的JSON值是指可以呈现为有效JSON格式的值。安全
对于引用数据类型
来讲,一般状况下和基本数据类型同样。可是引用数据类型中定义了toJSON()
方法,JSON字符串化的时候就优先调用该方法,用它的返回值来进行序列化。函数
var a = [ 1 ];
a.toJSON = function () {
return 'a'
}
JSON.stringify(a) // ""a""(含有双引号的字符串)
复制代码
tips:
toJSON()
应该返回是一个可以被字符串化的安全的JSON值,而不是返回一个JSON字符串ui
JSON.stringify.length // 3
复制代码
经过上述代码能够知道,JSON.stringify()
函数有 3个 参数,一般你们用到的只是第一个,下边咱们就依次来介绍下后边两个参数。spa
replacer
能够是数组或者函数,用来指定对象序列化过程当中哪些属性应该被处理,和toJSON()
很像。code
replacer
是一个数组的状况下,那么它必须是一个字符串数组(数组中的非字符串值会被忽略)。对象
var a = { b: 2, c: '2', d: [1, 2, 3] }
JSON.stringify(a, ['b', 'c']) // "{"b":2,"c":"2"}"
// 数组中包含非字符串值
JSON.stringify(a, ['b', 2]) // "{"b":2}"
复制代码
若是 replacer
是一个函数,这个函数会有两个参数(key, value);该函数会对对象自己调用一次,而后对对象中每一个属性各调用一次(深度遍历调用),若是要忽略某个属性就返回undefined
,不然返回指定的值。ip
var a = { b: 2, c: '2', d: [1, 2, 3] }
JSON.stringify(a, function (key, value) {
console.log('replacer')
if (key !== 'c') return value
})
// 输出7次replacer
// "{"b":2,"d":[1,2,3]}"
复制代码
space
用来指定输出的缩进格式。space
为整数N时,则每一级会比上一级缩进N个空格;space
为字符串S时,则每一级会比上一级缩进S。字符串
tips: N最大为10;S长度超过10位的话会取前十个字符get
var a = { b: 2, c: '2', d: [1, 2, 3] }
JSON.stringify(a, null, 4)
// "{
// "b": 2,
// "c": "2",
// "d": [
// 1,
// 2,
// 3
// ]
// }"
JSON.stringify(a, null, '----')
// "{
// ----"b": 2,
// ----"c": "2",
// ----"d": [
// --------1,
// --------2,
// --------3
// ----]
// }"
复制代码