json.stringify()詳解

小云
120
2023-09-13 06:38:55
欄目: 編程語言

JSON.stringify() 是一個(gè) JSON 對(duì)象的方法,用于將一個(gè) JavaScript 值轉(zhuǎn)換為一個(gè) JSON 字符串。

語法

JSON.stringify(value[, replacer[, space]])

參數(shù)

  • value:必需,要轉(zhuǎn)換成 JSON 字符串的值。

  • replacer:可選,用于轉(zhuǎn)換結(jié)果的函數(shù)或數(shù)組。如果是函數(shù),則在轉(zhuǎn)換過程中,被轉(zhuǎn)換的值會(huì)傳遞給這個(gè)函數(shù),并最終返回轉(zhuǎn)換結(jié)果。如果是數(shù)組,則只有包含在這個(gè)數(shù)組中的屬性名才會(huì)被轉(zhuǎn)換到 JSON 字符串中。

  • space:可選,用于美化輸出的字符串??梢允且粋€(gè)字符串,用于指定縮進(jìn)的空白字符,也可以是一個(gè)正整數(shù),表示縮進(jìn)的空格數(shù)。

返回值

一個(gè)表示給定值的 JSON 字符串。

示例

// 將一個(gè) JavaScript 對(duì)象轉(zhuǎn)換為 JSON 字符串
const obj = { name: "John", age: 30, city: "New York" };
const jsonStr = JSON.stringify(obj);
console.log(jsonStr);
// 輸出:{"name":"John","age":30,"city":"New York"}
// 將一個(gè)數(shù)組轉(zhuǎn)換為 JSON 字符串
const arr = [1, 2, 3, 4, 5];
const jsonArr = JSON.stringify(arr);
console.log(jsonArr);
// 輸出:[1,2,3,4,5]
// 使用 replacer 函數(shù)過濾轉(zhuǎn)換的屬性
const obj2 = { name: "John", age: 30, city: "New York" };
const jsonStr2 = JSON.stringify(obj2, ["name", "age"]);
console.log(jsonStr2);
// 輸出:{"name":"John","age":30}
// 使用 replacer 函數(shù)修改轉(zhuǎn)換的屬性
const obj3 = { name: "John", age: 30, city: "New York" };
const jsonStr3 = JSON.stringify(obj3, (key, value) => {
if (key === "name") {
return value.toUpperCase();
}
return value;
});
console.log(jsonStr3);
// 輸出:{"name":"JOHN","age":30,"city":"New York"}
// 使用 space 參數(shù)美化輸出
const obj4 = { name: "John", age: 30, city: "New York" };
const jsonStr4 = JSON.stringify(obj4, null, 2);
console.log(jsonStr4);
// 輸出:
// {
//   "name": "John",
//   "age": 30,
//   "city": "New York"
// }

注意事項(xiàng)

  • 轉(zhuǎn)換過程中,undefined、functionsymbol 類型的屬性會(huì)被自動(dòng)忽略。

  • 如果一個(gè)屬性值為 NaNInfinity-Infinity,則會(huì)被轉(zhuǎn)換成 null

  • 如果 replacer 是一個(gè)數(shù)組,但數(shù)組中的元素不是字符串,則會(huì)被忽略。

  • JSON.stringify() 方法不會(huì)轉(zhuǎn)換對(duì)象的原型鏈上的屬性。

  • 如果對(duì)象中存在循環(huán)引用,則會(huì)拋出 TypeError

  • 在轉(zhuǎn)換過程中,對(duì)于非法的 JSON 值(例如 Infinity、-InfinityNaN),會(huì)將其轉(zhuǎn)換成 null。

  • 自定義對(duì)象的屬性值如果含有函數(shù)(方法),則在轉(zhuǎn)換為 JSON 字符串時(shí)會(huì)被忽略。

  • 對(duì)象的屬性名如果為非字符串類型,會(huì)被自動(dòng)轉(zhuǎn)換為字符串。

  • 轉(zhuǎn)換一個(gè) JavaScript 值時(shí),可以通過在該值上添加 toJSON() 方法,來自定義值的轉(zhuǎn)換過程。

0