1. 程式人生 > >json是什麼,如何處理轉義?

json是什麼,如何處理轉義?

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返回的是指令碼程式碼。

PPT

video