JSON.stringify() 把 JavaScript 對(duì)象轉(zhuǎn)換為字符串。工作中嘗嘗會(huì)用到該方法佳簸,但是好多都是只使用第一個(gè)參數(shù)乙墙,而忽略了其余的兩個(gè)參數(shù)。了解其他參數(shù)生均,能幫你解決更多問(wèn)題听想。
語(yǔ)法
JSON.stringify(value[, replacer [, space]])
JSON.stringify 接受三個(gè)參數(shù):
value
將要序列化成 一個(gè) JSON 字符串的值。
第一個(gè)參數(shù)也就是要格式化的對(duì)象,這個(gè)大家基本常用的
let obj = {a:1,b:2,c:3}
JSON.stringify(obj)
//結(jié)果: '{"a":1,"b":2,"c":3}'
replacer 可選
該參數(shù)作為可選參數(shù)存在马胧,就很有意思了汉买。 該參數(shù)可以為函數(shù)和數(shù)組 或者 null
- 如果該參數(shù)是一個(gè)函數(shù),則在序列化過(guò)程中佩脊,被序列化的值的每個(gè)屬性都會(huì)經(jīng)過(guò)該函數(shù)的轉(zhuǎn)換和處理蛙粘;
該回調(diào)函數(shù)接受兩個(gè)參數(shù) key,value; 對(duì)應(yīng)的就是格式化對(duì)象的 key,value 威彰。我們可以通過(guò)一些邏輯判斷來(lái)過(guò)濾被格式化的內(nèi)容出牧。
//例子1:把key 為 c 的過(guò)濾掉
let obj = {a:1,b:2,c:3}
JSON.stringify(obj, function(key, value) {
if(key !== 'c') {
return value
}
})
// 結(jié)果: '{"a":1,"b":2}'
//例子2: 通過(guò)判斷條件還可以進(jìn)行對(duì)應(yīng)value的修改
let obj = {a:1,b:2,c:3}
JSON.stringify(obj, function(key, value) {
if(key == 'c') {
return '1111'
}
return value // 這里一定要 return value 不然就不會(huì)返回整體結(jié)果 就會(huì)輸出 undefined
})
// 結(jié)果:'{"a":1,"b":2,"c":"1111"}'
//修改了 obj 中 c 對(duì)應(yīng)的內(nèi)容
- 如果該參數(shù)是一個(gè)數(shù)組,則只有包含在這個(gè)數(shù)組中的屬性名才會(huì)被序列化到最終的 JSON 字符串中歇盼;
該數(shù)組的每一項(xiàng)為字符舔痕,對(duì)應(yīng)格式化對(duì)象的 key。當(dāng)格式化對(duì)象的key在該數(shù)組中存在旺遮。JSON.stringify() 將會(huì)只格式化存在的字符
let obj = {a:1,b:2,c:3}
JSON.stringify(obj, ['a', 'c'])
// 結(jié)果: '{"a":1,"c":3}'
- 如果該參數(shù)為 null 或者未提供赵讯,則對(duì)象所有的屬性都會(huì)被序列化。
null 就相當(dāng)于 只傳了第一個(gè)參數(shù)耿眉!
let obj = {a:1,b:2,c:3}
JSON.stringify(obj, null)
// 結(jié)果: '{"a":1,"b":2,"c":3}'
space 可選
指定縮進(jìn)用的空白字符串边翼,用于美化輸出(pretty-print);如果參數(shù)是個(gè)數(shù)字鸣剪,它代表有多少的空格组底;上限為10。該值若小于1筐骇,則意味著沒(méi)有空格债鸡;如果該參數(shù)為字符串(當(dāng)字符串長(zhǎng)度超過(guò)10個(gè)字母,取其前10個(gè)字母)铛纬,該字符串將被作為空格厌均;如果該參數(shù)沒(méi)有提供(或者為 null),將沒(méi)有空格告唆。
let obj = {a:1,b:2,c:3}
console.log(JSON.stringify({a:1,b:2,c:3}, ['a', 'c'], 2))
// 結(jié)果
{
"a": "foo",
"b": "bar"
}
console.log(JSON.stringify({a:1,b:2,c:3}, ['a', 'c'], '---'))
// 結(jié)果:
{
---"a": "foo",
---"b": "bar"
}
你也可以 使用棺弊。 \t tab縮進(jìn)
console.log(JSON.stringify({a:1,b:2,c:3}, ['a', 'c'], '\t'))
// 結(jié)果:
{
"a": "foo",
"b": "bar"
}