A. 使用json傳輸數據有什麼優缺點
JSON 作為一種更輕、更友好的 Web services客戶端的格式(多採用瀏覽器的形式或訪問 REST風格 Web服務的Ajax應用程序的形式)引起了 Web 服務供應商的注意。
JSON剖析:優點和不足
對於JSON,首先要明白JSON和XML一樣也是一種簡單文本格式。相對於XML,它更加易讀、更便於肉眼檢查。在語法的層面上,JSON與其他格式的區別是在於分隔數據的字元,JSON中的分隔符限於單引號、小括弧、中括弧、大括弧、冒號和逗號
乍看上去,使用JSON的數據分隔符的優點可能並不那麼明顯,但存在一個根本性的緣由:它們簡化了數據訪問。使用這些數據分隔符時, JavaScript引擎對數據結構(如字元串、數組、對象)的內部表示恰好與這些符號相同。
這將開創一條比DOM技術更為便捷的數據訪問途徑。下面列舉幾個JavaScript代碼片段來說明這一過程,這些代碼片段會訪問先前的JSON代碼片段中的信息:
訪問JSON中的名稱: addressbook.name
訪問JSON中的地址: addressbook.address.street
訪問JSON中的電話號碼第一位:addressbook.address.phoneNumbers[0]
如果您具備DOM編程經驗,就能很快地看出區別;新手可以參看 Document Object Model 的這一外部資源,這里提供了關於數據導航的實例。
JSON的另一個優點是它的非冗長性。在XML中,打開和關閉標記是必需的,這樣才能滿足標記的依從性;而在JSON中,所有這些要求只需通過一個簡單的括弧即可滿足。在包含有數以百計欄位的數據交換中,傳統的XML標記將會延長數據交換時間。目前還沒有正式的研究表明JSON比XML有更高的線上傳輸效率;人們只是通過簡單的位元組數比較發現,對於等效的JSON和XML有效負載,前者總是小於後者。至於它們之間的差距有多大,特別是在新的XML壓縮格式下它們的差距有多大,有待進一步的研究。
此外,JSON受到了擅長不同編程語言的開發人員的青睞。這是因為無論在Haskell中或 Lisp中,還是在更為主流的C#和PHP中,開發都可以方便地生成JSON(詳見 參考資料)。
不足
和許多好東西都具有兩面性一樣,JSON的非冗長性也不例外,為此JSON丟失了XML具有的一些特性。命名空間允許不同上下文中的相同的信息段彼此混合,然而,顯然在JSON中已經找不到了命名空間。JSON與XML的另一個差別是屬性的差異,由於JSON採用冒號賦值,這將導致當XML轉化為JSON時,在標識符(XML CDATA)與實際屬性值之間很難區分誰應該被當作文本考慮。
另外,JSON片段的創建和驗證過程比一般的XML稍顯復雜。從這一點來看,XML在開發工具方面領先於JSON。盡管如此,為了消除您對這一領域可能存在的困惑,
B. json格式適合大量數據交互嗎
非常適合,一把拿到數據都是json格式,然後通過js代碼在前台進行組織,因為js代碼是在客戶端執行的,在速度上取決於用戶計算機的配置,也就是說你用了最小的數據傳輸量,所以這樣是沒有問題的
C. 伺服器端和客戶端進行json數據傳輸,json是不是也是通過http協議進行位元組流傳輸的
先看一看json的定義: JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式。
可見它只是一種數據格式,專可以對其使用任屬何可行的傳輸協議。
但一般的網路傳輸都使用http協議,
這和使用http協議傳輸視頻格式文件,音頻的道理是一致的。
json的傳輸相當於對字元串的傳輸。
所以:
伺服器端和客戶端的json數據傳輸,可以而且最好使用http協議進行位元組流傳輸,但不僅限於http協議。
D. 如何優化很長的JSON數據
現在主流的網路請求中都採用JSON作為其數據交互格式,這主要是因為JSON有以下優勢:
但如果在開發過程中,把很長很大的JSON數據在前後端傳輸,那就說明設計工作沒做好,應該盡量避免這種數據傳輸,但也可以從下面幾個方面進行下優化:
在 Skylake 處理器上,各種解析器解析同一個大數據量的JSON文件的速度(以 GB/s 為單位)如下所示:
我們知道,JSON作為一種輕量級的數據交換格式,現在被廣泛應用,特別是在API層,返回數據格式基本上都是JSON。但是, JSON字元串如果過長,那在網路傳輸中也存在耗時的 ,站在性能角度我們需要合理優化JSON。
1、伺服器端 開啟GZip壓縮
主流的服務端都支持GZip壓縮,對於一般的純文本內容GZip壓縮率在35%以上,這樣做的好處也很明顯:
2、 鍵名縮短
對於結果集而言,數據都是查詢循環輸出的,所以當我們把鍵名縮短也變相壓縮了JSON文本長度。比如原本的 {"name":"張三"} 我們可以寫為 {"a":"張三"}
3、JSON中的 中文避免被轉為Unicode編碼
現在也有不少人喜歡將JSON中的漢字轉為Unicode編碼,此時JSON文本內容就會變得很長,如果避免漢字轉碼,可以控制文本長度。
1,開啟gzip,壓縮率很高,即便是很長的文本,在網路中傳輸量也很小 。
2,不建議分次請求,除非是業務需要。連接次數過多,加大了並發的壓力。
3,提醒用戶點擊的做法可以通過按鈕反饋或loading條來做。
4,如果有可能,考慮提前預讀你可以這樣,在一個隱藏的 iframe 裡面請求伺服器,返回值是這樣的: <script> parent.notifyDataArrive(YOURS_JSON_DATA); </script>