㈠ json傳值
JSON(javaScript Object Notation) 是一種輕量級的數據交換格式,採用完全獨立於語言的文本格式,是理想的數據交換格式。同時,JSON是 JavaScript 原生格式,這意味著在 JavaScript 中處理 JSON數據不須要任何特殊的 API 或工具包。
本文主要是對JS操作JSON的要領做下總結。
在JSON中,有兩種結構:對象和數組。
1. 一個對象以「{」(左括弧)開始,「}」(右括弧)結束。每個「名稱」後跟一個「:」(冒號);「『名稱/值』 對」之間運用 「,」(逗號)分隔。 名稱用引號括起來;值如果是字元串則必須用括弧,數值型則不須要。例如:
var o={"xlid":"cxh","xldigitid":123456,"topscore":2000,"topplaytime":"2009-08-20"};
2. 數組是值(value)的有序集合。一個數組以「[」(左中括弧)開始,「]」(右中括弧)結束。值之間運用 「,」(逗號)分隔。
例如:
var jsonranklist=[{"xlid":"cxh","xldigitid":123456,"topscore":2000,"topplaytime":"2009-08-20"},{"xlid":"zd","xldigitid":123456,"topscore":1500,"topplaytime":"2009-11-20"}];
在數據傳輸流程中,json是以文本,即字元串的形式傳遞的,而JS操作的是JSON對象,所以,JSON對象和JSON字元串之間的相互轉換是關鍵。例如:
JSON字元串:
var str1 = '{ "name": "cxh", "sex": "man" }';
JSON對象:
var str2 = { "name": "cxh", "sex": "man" };
一、JSON字元串轉換為JSON對象
要運用上面的str1,必須運用下面的要領先轉化為JSON對象:
//由JSON字元串轉換為JSON對象
var obj = eval('(' + str + ')');
或者
var obj = str.parseJSON(); //由JSON字元串轉換為JSON對象
或者
var obj = JSON.parse(str); //由JSON字元串轉換為JSON對象
然後,就可以這樣讀取:
Alert(obj.name);
Alert(obj.sex);
特別留心:如果obj本來就是一個JSON對象,那麼運用 eval()函數轉換後(哪怕是多次轉換)還是JSON對象,但是運用 parseJSON()函數處理後會有疑問(拋出語法異常)。
二、可以運用 toJSONString()或者全局要領 JSON.stringify()將JSON對象轉化為JSON字元串。
例如:
var last=obj.toJSONString(); //將JSON對象轉化為JSON字元
或者
var last=JSON.stringify(obj); //將JSON對象轉化為JSON字元
alert(last);
㈡ 如何優化很長的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>
㈢ 【JSON】JSON在前端和後端傳遞
後端:我們假定使用的是java語言
前端:毫無疑問是js
java語言:是一種強類型的語言,必須定義類型,然後生成實例;而js卻不是,雖然它也是面向對象的,但是它並沒有先定義類這一種概念(但是js也有類型),它是基於原型的一種模式,和java完全不同。很顯然,二者的原理,機制,語法並不能兼容。二者產生的對象並不能被對方解讀。再來看網路傳輸,通常就是http/tcp協議嘍,使用的其實是請求-響應,再說白了即使字元串,不論後台傳來的是什麼類型的數據,也不論前台傳回的什麼類型的數據,網路層統統當作字元串處理,它也沒有辦法來解析類型啊!說到這里,前後台傳數據也就只能用字元串了,那也就意味著它們各自都要完成一個轉換過程,把要發送的轉換成字元串,把要收到的字元串解析成自己的對象。因為傳輸的字元串會涉及前後台雙方的解析和處理,所以雙方都必須認識或者知道字元串該怎麼轉,也就是說,最好能有一種通用的規則來編輯,轉換字元串,這個標准或者協議就是JSON,JSON就是用來交換數據的,是一種string,一種獨立於平台的數據格式。
這樣一來,前台就需要把自己的數據類型轉成JSON,然後發給後台,後台在用JSON來解析數據,轉換成自己的類型。後台傳前台一樣。那麼,怎麼把自己的數據轉成JSON呢?
`JSON`對象可以通過JavaScript存取屬性!JSON對象封裝成JSON字元串經常用於前後台傳輸數據!
如果在前端使用,那麼JSON對象可以通過 對象.屬性名 來調用,如果是json字元串,那麼只是字元串了!
在數據傳輸過程中,JSON是以文本、即字元串的形式傳遞的,而JavaScript操作的是JSON對象,所以,JSON對象和JSON字元串之間的相互轉換是關鍵。
JSON字元串:var str = '{ name: 'xmt', sex: 'woman' }';
JSON對象: var str = { name: 'xmt', sex: 'woman' };
JSON字元串轉化為JSON對象:var obj = JSON.parse(str) ;
JSON對象轉化為JSON字元串:var str = JSON.stringify(obj);