json是什么,如何處理轉(zhuǎn)義

大家好,我是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)無法特殊字符無法處理時怎么辦?涼拌?


json是什么,如何處理轉(zhuǎn)義_騰訊視頻
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容