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
// ----]
// }"
複製代碼

參考

相關文章
相關標籤/搜索