不言而喻,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
// ----]
// }"
複製代碼