使用JSON.parse遇到的問題


今天做項目的時候,使用JSON.parse轉換字符串成json數據的時候遇到了一個問題,

舉例如下:

1 var jsonStr = '{"sex":"男","info":"我\\是好人"}';
2 JSON.parse(jsonStr);

運行結果如下:

 

jsonStr里有兩個反斜杠存在,JSON.parse在執行的時候則報錯了,我們用eval來執行自然是不會報錯的,運行結果如下:

我們再來看一下下面這三行代碼:

1 var jsonStr1 = '{sex:"男",info:"我是好人"}';
2 var jsonStr2 = "{'sex':'男','info':'我是好人'}";
3 var jsonStr3 = '{"sex":"男","info":"我是好人"}';

運行結果如下:

從運行結果可以看出:只有jsonStr3這種格式的json串JSON.parse才可以正確轉換,用eval來處理自然是沒有問題的,運行結果如下:

總結

JSON.parse是ES5提出的規范,兼容視圖如下:(url:http://kangax.github.io/es5-compat-table/

    JSON在ie中從ie8開始兼容,其他類型瀏覽器則幾乎全部兼容,JSON api使用的門檻也變低了,多數瀏覽器可以直接使用,

  一些json處理的第三方js插件也多數基於JSON原生api,個人認為jsonStr1,jsonStr2,jsonStr3這三種格式只有jsonStr3才能正確執行

  應該是JSON對json串的格式要求比較嚴格,比較規范;至於json串如果有兩個反斜杠則報錯,則不能理解。

  至於JSON.parse和eval的區別及利弊則引用《高性能Javascript》書中的一句話:

    警告:關於JSON和eval需要注意的是:在代碼中使用eval是很危險的,特別是用它執行第三方的JSON數據(其中可能包含惡意代碼)時,

  盡可能使用JSON.parse()方法解析字符串本身。該方法可以捕捉JSON中的語法錯誤,並允許你傳入一個函數,用來過濾或轉換解析結果。

  如果此方法以備Firfox 3.5 、IE8 及 Safari 4 原生支持。大多數javascript類庫包含的JSON解析代碼會直接調用原生版本,

  如果沒有原生支持的話,會調用一個略微不那么強大的非原生版本來處理。

   如有錯誤,歡迎指出,歡迎補充。


免責聲明!

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



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