文章編號:11560時間:2024-10-01人氣:
JSON.stringify()
是 javascript 中一個有用的函數,用于將 JavaScript 對象轉換為 JSON 字符串。它是一種將數據從 JavaScript 應用程序傳輸到后端或在客戶端存儲數據的常用方式。
JSON.stringify()
被調用時,它會通過以下步驟將 JavaScript 對象轉換為 JSON 字符串:1. 確定可序列化的值:檢查對象中每個屬性的類型。只有可序列化的值才能轉換為 JSON,包括:- 字符串- 數字- 布爾
JSON.stringify()
示例:
javascript
// 默認轉換
const obj = {name: "John", age: 30};
const jsonString = JSON.stringify(obj);
console.log(jsonString); // {"name":"John","age":30}// 使用 replacer 選項
const replacer = (KEY, value) => {if (key === "age") {return value + 1;}return value;
};
const jsonString2 = JSON.stringify(obj, replacer);
console.log(jsonString2); // {"name":"John","age":31}// 使用 space 選項
const jsonString3 = JSON.stringify(obj, null, 2);
console.log(jsonString3); // {"name": "John",// "age": 30}// 使用 timeout 選項
const timeout = 1000;
try {const jsonString4 = JSON.stringify(obj, null, 0, timeout);console.log(jsonString4);
} catch (err) {console.log(err); // 循環遍歷時間限制已超時
}
JSON.stringify()
是一個強大的函數,用于將 JavaScript 對象轉換為 JSON 字符串。了解其轉換過程和選項對于有效地使用它至關重要。通過指定不同的選項,您可以定制轉換行為并滿足特定要求。
在實際開發中有著豐富的應用場景,盡管你可能已經熟悉了它的基本用法,但其實它隱藏著更多實用特性。 這些特性往往在不經意間發揮作用,值得深入理解。 如果你覺得這個話題略顯枯燥,讓我們通過幾個有趣的場景來探索。 例如,深拷貝時,的deepCopy功能(如`((obj/arr))`)在處理引用類型數據時至關重要,它能確保新生成的對象與原對象在內存上獨立,互不影響。 在服務端數據存儲中,也十分關鍵。 比如,存儲的canvas模板數據和Vue-amap的SVG路徑信息,這時就需要序列化存儲。 另外,localStorage和sessionStorage存儲的數據必須先轉化為字符串,否則可能出現存儲失效的問題。 當從服務端接口獲取Canvas或SVG數據時,能幫助解析這些數據,并在和vue-amap等組件中正確渲染。 此外,還能過濾數據和格式化輸出,包括設置縮進,使其更易于閱讀。 不過,遇到自引用對象時,會拋出“cyclic object value”錯誤,這時需要特殊處理,比如使用庫。 對于具有相同屬性但順序不同的對象,的結果可能出乎意料,這需要額外注意。 在實際操作中,可能會遇到諸如數據庫存儲后屬性消失、axios請求參數undefined消失等問題,這可能是由于replacer函數的過濾、屬性設置或數據類型的特殊性導致的。 與localStorage的配合使用時,確保數據為字符串是關鍵。 通過上述內容,你應該對有了更深入的認識。 在遇到問題時,記得檢查replacer、對象屬性和數據類型,找出問題的根源。 加入我們的技術討論小組,一起交流學習,提升前端開發技能吧!
深入理解 () 和 () 的功能和用法,對于對象與JSON字符串的交互至關重要。 這兩個方法在轉換和序列化過程中起著核心作用。
() 是將JSON字符串解析為JavaScript對象的關鍵工具。 最常見的用法是將字符串轉換為包含數據的對象。 然而,在特殊情況下,如計算員工高溫費,可通過reviver函數實現屬性過濾或刪除。 需要注意的是,如果輸入的JSON格式有誤,它會拋出SyntaxError異常。
與之相對,() 負責將JavaScript對象轉換為JSON字符串。 使用時,可以指定特定屬性進行序列化,或者處理數組和非數組對象的轉換規則。 遇到循環引用或BigInt類型時,會引發TypeError異常。 MDN文檔提供了詳細的行為規范,包括值的序列化規則和異常處理。
其他應用場景我們都知道JSON對象有兩個方法,一個是parse,用來把json字符串轉換為json對象,另一個是stringify,用來把json對象轉換為json字符串, 可是stringify其實還有其它作用。 比如說有一個對象 {a:1,b:2,c:3,d:4,e:5} ,現在我們只需要b屬性和e屬性,可以這樣來操作
(value, replacer , space) 語法
將要序列化成 一個JSON 字符串的值。
如果該參數是一個函數,則在序列化過程中,被序列化的值的每個屬性都會經過該函數的轉換和處理;如果該參數是一個數組,則只有包含在這個數組中的屬性名才會被序列化到最終的 JSON 字符串中;如果該參數為null或者未提供,則對象所有的屬性都會被序列化。
指定縮進用的空白字符串,用于美化輸出(pretty-print);如果參數是個數字,它代表有多少的空格;上限為10。 該值若小于1,則意味著沒有空格;如果該參數為字符串(字符串的前十個字母),該字符串將被作為空格;如果該參數沒有提供(或者為null)將沒有空格。
當我們使用 () 序列化一個值為JSON字符串,只有 JSON安全的值 才可以通過 ()轉換為字符串。 那么,什么是 JSON安全的值 ?能夠有效用JSON形式表示的任何值。
非JSON安全的值,例如: undefined 、 function 和 symbol 以及循環引用的object(對象結構的屬性引用通過創建彼此,構成一個無限循環)。 對一個標準的JSON結構來說,這些值都是非法的,主要是因為它們無法移值到其他支持JSON的語言中。
當 () 遇到 undefined 、 function 和 symbol 的時候,會自動忽略它們的值,如果這樣的值在數組中會被替換成 null (這樣數組的索引信息就不會被改變)。 如果這樣的值出現在對象的屬性中,那這個屬性會被排除掉。
JSON字符串有一個特殊的行為,如果一個對象定義了 toJSON() 方法,那這個方法先被調用,并且將它返回的值進行序列化。
如果將一個含有非法JSON值的對象序列化成JSON字符串,需要定義一個 toJSON() 方法,用于返回該對象的JSON安全版本。
()第二個參數是個可選參數,被稱為replacer。 這個參數可以是數組或者函數。 它提供了一個過濾機制制定了應該或者不應該包含哪些屬性,從而實現了對象可定制的遞歸序列化,這種做法和toJSON()如何序列化準備一個值很相似。
如果replacer是一個數組,它應該是一個字符串數組,每一個值都指定了對象的屬性名稱,代表屬性應該被加入到序列化中,如果一個屬性不在這個列表中,它會被跳過。
如果replacer是一個函數,它首先會被該對象調用一次,然后該對象的每個屬性會調用一次,每次都會給這個函數傳遞兩個值,key和value。 想在序列化過程中跳過某個key,只需要返回undefined,否則返回提供的value。
第三個可選的參數也可以傳遞給(),被稱為space,被用作縮進,是為了使得輸出有格式更加漂亮。 space可以是一個正整數,指定每層縮進應該縮進多少個空格。 或者space也可以是個字符串,其值的前十個字符被用于每個縮進層次。
后臺輸出的是[object Object],看不到具體的內容,此時只需在前端頁面上利用()將該傳輸數據轉換成與json文件中格式一致就可以解決問題。
代碼如下:
(date) //data
注() 方法是將一個JavaScript值(對象或者數組)轉換為一個 JSON字符串。
擴展資料:
[object Object]進一步獲得值的方法:
1、對象中有數組,數組中有對象的情況
data={total:3,rows:[{name:老四,},{name:老六,電
提取“老四”: var da=[0];
2、對象中有數組的情況
data={rows:[2,4,5,6,8]}
提取數組:var da=;或者 var da=data[rows];
內容聲明:
1、本站收錄的內容來源于大數據收集,版權歸原網站所有!
2、本站收錄的內容若侵害到您的利益,請聯系我們進行刪除處理!
3、本站不接受違法信息,如您發現違法內容,請聯系我們進行舉報處理!
4、本文地址:http://www.hudongshop.com/article/ad9d58d32d956d03466c.html,復制請保留版權鏈接!