json是什麼,如何處理轉義?
阿新 • • 發佈:2019-02-18
1.背景介紹
在JSON出現之前,人們一直用XML來傳遞資料。因為XML是一種純文字格式,所以它適合在網路上交換資料。XML本身不算複雜,但是,加上DTD、XSD、XPath、XSLT等一大堆複雜的規範以後 ,XML使用起來很繁瑣。後來,出現了JSON。JSON是道格拉斯·克羅克福特(DouglasCrockford)在2001年開始推廣使用的資料格式,在2005年-2006年正式成為主流的資料格式,雅虎和谷歌就在那時候開始廣泛地使用JSON格式。
2.知識剖析
JSON簡介
JSON (JavaScript Object Notation, JS 物件標記) 是一種輕量級的資料交換格式。它基於 ECMAScript (w3c制定的js規範)的一個子集,採用完全獨立於程式語言的文字格式來儲存和表示資料。簡潔和清晰的層次結構使得 JSON 成為理想的資料交換語言。 易於人閱讀和編寫,同時也易於機器解析和生成,並有效地提升網路傳輸效率。資料傳輸是我們在敲程式碼時,經常遇到的一個場景,前後端互動。給資料一個統一的格式有利於我們編寫和解析資料。json,是一種資料格式,在與後端的資料互動中有較為廣泛的應用。
JSON語法
資料在名稱/值對中
資料由逗號分隔
大括號儲存物件
中括號儲存陣列
JSON值
數字(整數/浮點數)
字串
布林值(true/false)
陣列(中括號中)
物件(大括號中)
null
例
var json = {"password":123456,"name":"myname","Booleans":true,"Array":[x,y,z],"object":{}}
JSON巢狀
myObj = {
"name":"jnshu",
"alexa":1000,
"sites": {
"site1":"www.jnshu.com",
"site2":"m.jnshu.com",
"site3":"c.jnshu.com"
}
}
console.log(myObj)
//輸出結果:
// Object {name: "jnshu", alexa: 1000, sites: Object}
JSON使用
JSON.parse()將字串轉化為物件
JSON.stringify()將物件轉化為字串
var str = '{ "name": "cxh", "sex": "man" }';// JSON字串
var obj = JSON.parse(str); //由JSON字串轉換為JSON物件
//讀取
Alert(obj.name);
Alert(obj.sex);
var a = { "name": "cxh", "sex": "man" };//JSON物件
var b =JSON.stringify(a); //將JSON物件轉化為JSON字元
3.常見問題
如何處理轉義
4.解決方案
在用JSON.parse解析JSON物件時會對其中的轉義符進行兩次解析
將字串'{"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: "\"}, 也就是說實際顯示的資料為一個\(實際可輸出一個\說明在此之前還有一個\)。
總結:JSON.parse的引數包含轉移字元的時候會遇到兩次轉義的問題,其實第一次是字串本身的轉義,第二次是真正轉為js物件的轉義。
5.編碼實戰
6.擴充套件思考
7.參考文獻
JSON物件 -- JavaScript 標準參考教程(alpha)
JSON.stringify 語法例項講解
JSON.parse() - JavaScript
8.更多討論
問題一 介紹一下XML
答:
XML 指可擴充套件標記語言(EXtensible Markup Language)
XML 是一種標記語言,很類似 HTML
XML 的設計宗旨是傳輸資料,而非顯示資料
XML 標籤沒有被預定義。您需要自行定義標籤。
XML 被設計為具有自我描述性。
XML 是 W3C 的推薦標準
問題二 JSON的應用場景是什麼?
答:前後端資料傳輸,頁面之間資料傳輸。
問題三 json和jsonp的區別是什麼?
答:
json是一種基於文字的資料交換格式,jsonp是一個跨域互動協議。
json返回的是一串資料;而jsonp返回的是指令碼程式碼。