JSON.stringify(value[, replacer [, space]])
其中各個引數含義如下:var obj = { name: 'kingx', age: 15, address: String('北京市'), interest: ['basketball', 'football'], email: '[email protected]' }; console.log(JSON.stringify(obj));當只傳遞第一個引數時,輸出的結果如下所示:
{"name":"kingx","age":15,"address":" 北京市","interest":["basketball","football"], "email":"[email protected]"}當傳遞了 replacer 引數並且值為一個函數時,函數所做的處理是,假如屬性值為字串型別,則將值轉換為大寫。
function replacerFn(key, value) { if (typeof value === 'string') { return value.toUpperCase(); } return value; }; console.log(JSON.stringify(obj, replacerFn));輸出的結果如下所示:
{"name":"KINGX","age":15,"address":"北京市","interest":["BASKETBALL","FOOTBALL"],"email":"[email protected]"}通過結果可以看出,name、address、email 屬性值為字串型別,其值都轉換成了大寫字母,但是 interest 屬性值為陣列型別,為什麼陣列中的值也轉換成了大寫字母呢?
console.log(JSON.stringify(obj, ['name', 'age']));輸出的結果如下所示:
{"name":"kingx","age":15}關於 JSON 序列化,有以下一些注意事項:
JSON.stringify([new Number(1), new String("false"), new Boolean(false)]);輸出的結果如下所示:
'[1,"false",false]'
JSON.stringify({x: undefined, y: Object, z: Symbol("")});在非陣列物件中輸出的結果如下所示:
'{}' JSON.stringify([undefined, Object, Symbol("")]);在陣列物件中輸出的結果如下所示:
'[null,null,null]'
var a = {"name": "z z z"}; var b = {"name": "vvv"}; a.child = b; b.parent = a; console.log(JSON.stringify(a));執行後,控制檯會丟擲異常。提示資訊為迴圈參照結果轉換為 JSON 失敗。
TypeError: Converting circular structure to JSON
JSON.stringify({[Symbol("foo")]: "foo"});輸出的結果如下所示:
'{}'
var p = Object.create(null, { name: { value: 'xiaoming', enumerable: false }, age: { value: 15, enumerable: true } }); console.log(JSON.stringify(p));輸出的結果如下所示:
{"age":15}
var obj2 = { name: 'kingx', age: 15, address: String('北京市'), interest: ['basketball', 'football'], email: '[email protected]', toJSON: function () { // 只返回name和age屬性值,並且修改key return { Name: this.name, Age: this.age }; } };呼叫 JSON.stringify() 函數。
console.log(JSON.stringify(obj 2)); console.log(JSON.stringify({name: obj 2}, ['name']));輸出的結果如下所示:
{"Name":"kingx","Age":15} {"name":{}}對於第一個結果,因為 obj2 有 toJSON() 函數,所以返回值為帶有 Name 和 Age 屬性的值“{"Name":"kingx","Age":15}”,然後直接進行序列化,得到結果。