當我們在處理 JSON 數(shù)據(jù)時,有時需要將字符串類型的 JSON 轉換為 JSON 對象,在 JavaScript 中,可以使用 eval() 函數(shù)來實現(xiàn)這個過程。
var jsonString = '{"name": "小明", "age": 18}'; var jsonObj = eval("(" + jsonString + ")"); console.log(jsonObj);
eval() 函數(shù)會將傳入的參數(shù)當作 JavaScript 代碼進行解析執(zhí)行。這里我們將字符串類型的 JSON 數(shù)據(jù)作為參數(shù)傳入 eval() 函數(shù),并將字符串前后加上小括號,這是因為在 JavaScript 中,一個對象必須被包含在括號內(nèi)才能被當作一個單獨的對象進行處理。
使用 eval() 函數(shù)將字符串類型的 JSON 轉換為 JSON 對象的方法已經(jīng)被廣泛使用,但是使用 eval() 函數(shù)還是會存在一些潛在的安全風險。因為 eval() 函數(shù)會執(zhí)行傳入的任何 JavaScript 代碼,如果不加以限制,則可能導致代碼注入等安全問題。
為了避免 eval() 函數(shù)帶來的安全問題,我們可以使用更安全的 JSON.parse() 函數(shù)來完成字符串類型的 JSON 轉換。
var jsonString = '{"name": "小明", "age": 18}'; var jsonObj = JSON.parse(jsonString); console.log(jsonObj);
JSON.parse() 函數(shù)可以將 JSON 字符串解析為 JavaScript 對象,它支持傳入一個可選的第二個參數(shù)用于對解析后的對象進行修改。與使用 eval() 函數(shù)相比,JSON.parse() 函數(shù)更加安全,但是只適用于處理字符串類型的 JSON 數(shù)據(jù)。