歡迎訪問我的個人部落格:http://www.xiaolongwu.cn
寫在前面的話
這個問題在之前做專案時碰到過一次,當時按照網上的做法,去掉JSON.parse()這一層轉換後就沒有這個報錯了,資料也能正常使用,就沒多想,也沒深究是什麼原因。
可是這次又碰到了,所以這次必須要弄明白原因。
先看看它的作用
JSON.parse()用於從一個字串中解析出json物件,如
var str = `{"name":"LeonWu","age":"18"}`
JSON.parse(str);
//結果為一個Object
// age: "18";
// name: "LeonWu";
JSON.stringify()用於從一個物件解析出字串,如
var a = {a:1,b:2,c:"LeonWu"};
JSON.stringify(a);
//結果為 "{"a":1,"b":2,"c":"LeonWu"}"
背後的原因
報錯的原因
因為你要轉換的資料本來就是object,JSON.parse()這個方法是把一個字串解析出json物件,你再轉換就會報錯;
為什麼會有這樣的錯誤
因為把Object作為引數傳到JSON.parse()裡時,首先會默利用toString()方法轉為string,結果為”[object Object]”。
JSON.parse()將第一個字元`[`理解為陣列的開始,第二字元`o`不知道怎麼處理;所以就丟擲了上面的錯誤資訊 Unexpected token o in JSON at position 1。
——————— 分割線,2019年1月22日11:21:03更新———————–
好多人在下面評論,問最終的解決方案,可能是我沒有寫清楚的緣故吧。
解決方案我在文章開頭就說了,就是去掉JSON.parse()這一層轉換,因為你需要轉換的資料本來就是一個json物件了,不需要在轉換了。
github資源倉庫:bug集合js1–Unexpected token o in JSON at position 1
我的CSDN部落格地址:https://blog.csdn.net/wxl1555
如果您對我的部落格內容有疑惑或質疑的地方,請在下方評論區留言,或郵件給我,共同學習進步。
郵箱:wuxiaolong802@163.com