[JavaScript] JSON.stringify() and JSON.parse():變 JSON 和變物件

itsems
itsems_frontend
Published in
5 min readAug 17, 2020
Photo by Icons8 Team on Unsplash

在處理接收到的 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。若為字串,一樣最多可以十個字。

原樣
加了一個空格
有 tab 空格的縮排
10 個空格

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}"
Photo by Joakim Honkasalo on Unsplash

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
Photo by Joakim Honkasalo on Unsplash

Answer: A

JSON.parse() 可以將 JSON 字串轉為 Javascript 的值,不限定物件:

內容若有任何錯誤,歡迎留言交流指教! 🐬

ref:
MDN-JSON.stringify()
MDN-JSON.parse()

--

--

itsems
itsems_frontend

Stay Close to Anything that Makes You Glad You are Alive.