大家好,我是IT修真院成都分院第7期的學員韓建名,一枚正直純潔善良的WEB前端程序員。
今天給大家?guī)淼氖牵簀son是什么,如何處理轉(zhuǎn)義
目錄
1.背景介紹
2.知識剖析
3.常見問題
4.解決方案
5.編碼實戰(zhàn)
6.擴展思考
7.參考文獻
8.更多討論
1.背景介紹
J O S N是什么?
JSON 是適用于 Ajax 應用程序的一種有效格式,原因是它使 JavaScript 對象和字符串值之間得以快速轉(zhuǎn)換 JSON是一種傳遞對象的語法,對象可以是name/value對,數(shù)組和其他對象。
轉(zhuǎn)義
大家在調(diào)用 jsonp 接口或者調(diào)用js文件的時候,由于文件編碼不同導致的亂碼問題,應該不會陌生吧。 如果你的文件出現(xiàn)了非英文字符,如果調(diào)用時文件編碼不一致,則會出現(xiàn)亂碼情況。
JSON是一個提供了stringify和parse方法的內(nèi)置對象
stringify將js對象轉(zhuǎn)化為符合json標準的字符串
parse將符合json標準的字符串轉(zhuǎn)化為js對象
2.知識剖析
JSON.parse
JSON.parse的參數(shù)包含轉(zhuǎn)移字符的時候會遇到兩次轉(zhuǎn)義的問題,其實第一次是字符串本身的轉(zhuǎn)義,第二次是將真正轉(zhuǎn)為js對象的轉(zhuǎn)義。
舉例如下: 例子一:將字符串'{"a":"b","b":"\\\\"}'傳遞給JSON.parse,首先解析器提取單引號括起來的字符串時認為第一個\轉(zhuǎn)義第二個\ 第三個\轉(zhuǎn)義第四個\, 也就是說實際可輸出字符串是{"a":"b","b":"\\"}(可通過console.log('{"a":"b","b":"\\\\"}')驗證),之后正式轉(zhuǎn)為js對象的時候還有一次轉(zhuǎn)義, 也就是實際輸出字符轉(zhuǎn)中的第一個\轉(zhuǎn)義第二個\(此時只有兩個\)。 所以console.log(JSON.parse('{"a":"b","b":"\\\\"}') );輸出結(jié)果為Object {a: "b", b: "\"}, 也就是說實際顯示的數(shù)據(jù)為一個\(實際可輸出一個\說明在此之前還有一個\)。
例子二:
var obj = {a : "b",b : "\\",c : {b : "\\",a : {b : "\\"}}};
var json_str = JSON.stringify(obj);
console.log( JSON.stringify(obj) );
console.dir(JSON.parse(json_str));
console.dir(JSON.parse('{"a":"b","b":"\\\\","c":{"b":"\\\\","a":{"b":"\\\\"}}}'));
根據(jù)轉(zhuǎn)義規(guī)則,實際輸出一個\在這個\之前必定有一個\。所以如上第一行輸出按照書寫來說為'{"a":"b","b":"\\\\","c":{"b":"\\\\","a":{"b":"\\\\"}}}',可通過第三條輸出來驗證。 總結(jié),如果想在js對象中出現(xiàn)一個\,需要在json字符串中出現(xiàn)四個\ 。
3.常見問題
特殊字符導致json字符串轉(zhuǎn)換成json對象出錯
對于其他的其他的特殊字符 1.雙引號("),如果正確出現(xiàn)雙引號應為\\\" 2.\n,如想想出現(xiàn)正確的換行需要json字符串中是\\n,其實是先對\n中的\轉(zhuǎn)義,n變成了普通字符,在解析為js對象的時候n與之前的\(只有一個\了)被解釋為換行。如下的兩個與此類似。 3.\r,\\r 4.\t,\\t
http://blog.csdn.net/robotech_er/article/details/40260377
4.解決方案
JSON.stringify 語法
語法: JSON.stringify(value [, replacer] [, space]) value:是必須要的字段。就是你輸入的對象,比如數(shù)組啊,類啊等等。 replacer:這個是可選的。它又分為2種方式,一種是方法,第二種是數(shù)組。 情況一:我們先說數(shù)據(jù),通過我們后面的實驗可以知道,它是和第一個有關系的。一般來說,我們系列化后的結(jié)果是通過鍵值對來進行表示的。 比如說:
name:"lan",age:25
情況二:如果是方法,那很簡單,就是說把系列化后的每一個對象(記住 是每一個)傳進方法里面進行處理。 space:很好理解,用什么來做分隔符的。 1.如果省略的話,那么顯示出來的值 就沒有分隔符。直接輸出來 2.如果是一個數(shù)字的話,那么它就定義縮進幾個字符,當然 如果大于10 ,則最大值為10. 3.如果是一些轉(zhuǎn)義字符,比如“\t”,表示回車,那么它每行一個回車。 4.如果僅僅是字符串,OK,就在每行輸出值的時候把這些字符串附加上去就OK。當然,最大長度也是10個字符。
var obj={
webName:"腳本之家",
url:"jb51.net",
age:"2"
}
var str=JSON.stringify(obj)
console.log(str);
var student = new Object();
student.name = "Lanny";
student.age = "25";
student.location = "China";
var json = JSON.stringify(student);
alert(student);
5.參考文獻
參考一:參考一
參考一:參考二
8.更多討論
JSON處理轉(zhuǎn)義時出現(xiàn)無法特殊字符無法處理時怎么辦?涼拌?