當我們使用eval函數解析JSON字符串時,往往會遇到字符串截斷的問題。
var jsonStr = "{\"name\":\"張三\",\"age\":18,\"address\":\"四川省成都市青羊區\"}"; // 假設這是一個JSON字符串 var jsonObj = eval('(' + jsonStr + ')'); // 解析JSON字符串 console.log("姓名:" + jsonObj.name); // 輸出姓名:張三
但是如果這個JSON字符串比較長,可能會發生截斷:
var longStr = "{\"name\":\"張三\",\"age\":18,\"address\":\"四川省成都市青羊區\", ...}"; // 這是一個很長的JSON字符串 var jsonObj = eval('(' + longStr + ')'); // 解析JSON字符串 // 報錯:Uncaught SyntaxError: Unexpected end of input
發生截斷的原因是因為eval函數默認只能解析字符串長度小于65535的字符串,如果JSON字符串超過了這個限制就會發生截斷。
解決方法是使用JSON.parse函數代替eval函數,JSON.parse函數可以解析任意長度的JSON字符串:
var jsonStr = "{\"name\":\"張三\",\"age\":18,\"address\":\"四川省成都市青羊區\", ...}"; // 這是一個很長的JSON字符串 var jsonObj = JSON.parse(jsonStr); // 解析JSON字符串 console.log("姓名:" + jsonObj.name); // 輸出姓名:張三
所以在處理JSON字符串時,最好使用JSON.parse函數代替eval函數,以避免因字符串截斷導致的解析錯誤。