Unexpected token o in JSON at position 1 at JSON.parse ( ) SyntaxError: Unexpected token R in JSON at position 0 at JSON.parse ( )


這個問題在之前做項目時碰到過一次,當時按照網上的做法,去掉JSON.parse()這一層轉換后就沒有這個報錯了,數據也能正常使用,就沒多想,也沒深究是什么原因。可是這次又碰到了,所以這次我必須要弄明白原因。

先看看它的作用
JSON.parse()用於從一個字符串中解析出json對象,如

var str = '{"name":"LeonWu","age":"18"}'

JSON.parse(str);

//結果為一個Object
// age: "18";
// name: "LeonWu";
1
2
3
4
5
6
7
JSON.stringify()用於從一個對象解析出字符串,如

var a = {a:1,b:2,c:"LeonWu"};

JSON.stringify(a);

//結果為 "{"a":1,"b":2,"c":"LeonWu"}"
1
2
3
4
5
6
背后的原因
報錯的原因:
因為你要轉換的數據本來就是object,這個方法是把一個字符串解析出json對象,你再轉換就會報錯;

為什么會有這樣的錯誤:
因為把Object作為參數傳到JSON.parse()里時,它會默把Object轉為string,
就會先調用原型上的toString()方法;結果為”[object Object]”,JSON.parse將第一個字符’[‘理解為數組的開始,第二字符’o’不知道怎么處理;所以就拋出了上面的錯誤信息 Unexpected token o in JSON at position 1。
---------------------

JSON字符串:
var str1 = '{ "name": "cxh", "sex": "man" }'; 
JSON對象:
var str2 = { "name": "cxh", "sex": "man" };

一、JSON字符串轉換為JSON對象

要使用上面的str1,必須使用下面的方法先轉化為JSON對象:

//由JSON字符串轉換為JSON對象

var obj = eval('(' + str + ')');

或者

var obj = str.parseJSON(); //由JSON字符串轉換為JSON對象

或者

var obj = JSON.parse(str); //由JSON字符串轉換為JSON對象

然后,就可以這樣讀取:

Alert(obj.name);

Alert(obj.sex);

特別注意:如果obj本來就是一個JSON對象,那么使用eval()函數轉換后(哪怕是多次轉換)還是JSON對象,但是使用parseJSON()函數處理后會有問題(拋出語法異常)。

二、可以使用toJSONString()或者全局方法JSON.stringify()將JSON對象轉化為JSON字符串。

例如:

var last=obj.toJSONString(); //將JSON對象轉化為JSON字符

或者

var last=JSON.stringify(obj); //將JSON對象轉化為JSON字符

 

在使用JSON.parse的時候,返回來的數據一定是嚴格的json格式,key值一定要用 雙引號 包起來,否則瀏覽器就會拋出異常。
另外,對於不標准的json字符串,如第一種示例,使用eval()雖然可以正常解析,但是從安全的角度來講,一定要謹慎使用eval方法。規范json格式。



參考:https://blog.csdn.net/wxl1555/article/details/79184076


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM