JSON.stringify()

写在前边

不言而喻,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()

JSON.stringify.length // 3
复制代码

经过上述代码能够知道,JSON.stringify()函数有 3个 参数,一般你们用到的只是第一个,下边咱们就依次来介绍下后边两个参数。spa

参数二(replacer)

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 用来指定输出的缩进格式。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
// ----]
// }"
复制代码

参考

相关文章
相关标签/搜索