由json字串生成json物件時的轉義問題 | json跳脫雙引號
這個問題的核心就是解析字串時會有兩次轉義。—————————————————轉義字元()對JavaScript中JSON.parse的影響概述JSON是一個提供了stringify和parse方法的內建物件,前者用於將js物件轉化為符合json標準的字串,後者將符合json標準的字串轉化為js物件,本文為大家介紹下轉義字元對JSON.parse方法的影響。按照ECMA262第五版中的解釋,JSON是一個提供了stringify和parse方法的內建物件,前者用於將js物件轉化為符合json標準的字串,後者將符合json標準的字串轉化為js物件。json標準參考
這個問題的核心就是解析字串時會有兩次轉義。
—————————————————轉義字元()對JavaScript中JSON.parse的影響概述
JSON是一個提供了stringify和parse方法的內建物件,前者用於將js物件轉化為符合json標準的字串,後者將符合json標準的字串轉化為js物件,本文為大家介紹下轉義字元對JSON.parse方法的影響。
按照ECMA262第五版中的解釋,JSON是一個提供了stringify和parse方法的內建物件,前者用於將js物件轉化為符合json標準的字串,後者將符合json標準的字串轉化為js物件。json標準參考<a href=”http://json.org/” target=”_blank”>json.org</a>。(其實將符合json標準的字串轉化為js物件可以用eval,但是eval效能相對差且存在安全隱患(會執行json字串中的程式碼),本文寫的是轉義字元對JSON.parse方法的影響。
一般來說在JSON.parse的引數包含轉移字元的時候會遇到兩次轉義的問題,其實第一次是字串本身的轉義,第二次是將真正轉為js物件的轉義。
舉例如下: 例子一:將字串{“a”:”b”,”b”:”\\”}’傳遞給JSON.parse,首先解析器提取單引號括起來的字串時認為第一個轉義第二個 第三個轉義第四個,也就是說實際可輸出字串是{“a”:”b”,”b”:”\”}(可通過console.log(‘{“a”:”b”,”b”:”\\”}’)驗證),之後正式轉為js物件的時候還有一次轉義,也就是實際輸出字元轉中的第一個轉義第二個(此時只有兩個)。所以console.log(JSON.parse(‘{“a”:”b”,”b”:”\\”}’));輸出結果為Object {a: “b”, b: “”},也就是說實際顯示的資料為一個(實際可輸出一個說明在此之前還有一個)。 例子二: var obj = { a : “b”, b : “\”, c : { b : “\”, a : { b : “\” } } }; var json_str = JSON.stringify(obj); conso...