[JavaScript] JSON.stringify() and JSON.parse():變 JSON 和變物件
在處理接收到的 JSON 的時候,這兩個互轉的方法總是查了又忘,忘了又查,必須寫下來
JSON.stringify() :物件變 JSON
JSON 會儲存純文字,不算是一種 Javascript,但是 Javascipt 有內建的方法可以解析他,其中將任何物件轉變為 JSON 字串的方法,就是 JSON.stringify()
,string 本身就是字串的意思,stringify 則視為動詞字串化,將 Javascript 物件轉為 JSON 字串。
JSON.parse():JSON 變物件
JSON.parse() 則相反,可以接收 JSON 字串,轉為 Javascript 物件或是值。
一些進階的用法
JSON.stringify() 和 JSON.parse() 其實除了直接把要轉換的東西放進去之外,都可以再帶更多參數,來看看:
JSON.stringify()
JSON.stringify() 可以帶另外兩個參數,第一個是替換參數 (replacer),第二個則是間隔參數 (space)。
替換參數 (replacer)
替換函數可以是一個函式也可以是一個陣列。
函式用法:可以帶入兩個參數,key 和 value,如果用於過濾,將 value 轉換為 undefined
,則不會回傳:
陣列用法:如果替換函數是一個陣列,會回傳物件中的 name 和陣列的值相等的資料:
間隔參數 (space)
間隔參數可用來在輸出 JSON 的時候插入內容或是空白增加可讀性,這個參數可以是一個字串或是數字,數字的話最多可以 10,大於 10 也會取 10,最小 1。若為字串,一樣最多可以十個字。
JSON.parse() 可以額外再接受一個參數:「reviver」,如果 reviver 有被指定,解析後的值或是物件屬性會被這個 reviver 過濾,如果 reviver 回傳了 undefined,則也會被刪除:
📝 Quiz time !
以下取自 JavaScript Questions 中相關的小測驗,希望看完上面的說明,下面的題目可以讓你迎刃而解:
What’s the output?
const settings = {
username: 'lydiahallie',
level: 19,
health: 90,
};
const data = JSON.stringify(settings, ['level', 'health']);
console.log(data);
- A:
"{"level":19, "health":90}"
- B:
"{"username": "lydiahallie"}"
- C:
"["level", "health"]"
- D:
"{"username": "lydiahallie", "level":19, "health":90}"
Answer: A
後面的陣列是我們的替換函數 (replacer),所以就回傳了物件中 name 為 ‘level’
和 ‘health’
的資料。
下一題!
What does this method do?
JSON.parse();
- A: Parses JSON to a JavaScript value
- B: Parses a JavaScript object to JSON
- C: Parses any JavaScript value to JSON
- D: Parses JSON to a JavaScript object only
Answer: A
JSON.parse()
可以將 JSON 字串轉為 Javascript 的值,不限定物件:
內容若有任何錯誤,歡迎留言交流指教! 🐬