什麼是JSON?
JSON(JavaScript Object Notation, JS 對象簡譜) 是一種輕量級的數據交換格式。它基於 ECMAScript (歐洲計算機協會制定的js規範)的一個子集,採用完全獨立於編程語言的文本格式來存儲和表示數據。簡潔和清晰的層次結構使得 JSON 成為理想的數據交換語言。 易於人閱讀和編寫,同時也易於機器解析和生成,並有效地提升網路傳輸效率。
json前兩個字就是js,說明其與js必然存在一些聯繫,其實json可以理解為盛裝js數據的一個容器(不是只能裝js的,不要扣這些),說白了,就是儲存數據的一個小玩意兒。其實如果你身邊有搞前端的同學,不難發現,他們會經常說介面、報文,對於一個後端小白的我來說,也很想明白這究竟是個什麼東東,最近工作一直做前後端開發,所以跟json結下了緣。
前端中json大致是形如這個樣子的,就是冒號左邊一個名字(鍵),右邊是具體的值(值),其實就是鍵值對。
var json = {"xxx":"xxx"};
右邊可以是一個數字,可以是一個對象,可以是字元串,可以是一個數組,可以是一個json(套娃),我給大家舉個例子大家就明白了,既然是容器,必然要有大的,有小的,啥都能裝。
裝數字:
var feeInfoList = {"num":11};
通過feeInfoList.num就可以拿到num對應的值:11,很簡單吧?
裝字元串:
var feeInfoList = {"name":"小斌哥"};
通過feeInfoList.name,就能拿到帶雙引號的"小斌哥"啦~
裝對象:
var 小斌哥= {"name":"小斌哥", "age":21, "sex":"爺們"};
小斌哥這個對象裡面包含姓名、年齡和性別,多個數據可以通過逗號隔開,因此,小斌哥這個對象就生成了!!
裝數組
var array = {"array":[
{
"name":"小斌哥",
"sex":"爺們",
"age":21
},
{
"name":"貂蟬",
"sex":"美女",
"age":18
}
]};
直接看可能比較懵,但是仔細看,鍵是"array",值就是後面的一大坨,對嗎?那一大坨拆開看,是不是就是一個個的對象,對象之間用逗號隔開了,對象裡面有姓名、性別和年齡,每一個屬性都是用鍵值對裝的,並且用逗號隔開,是不是很容易呢,其實如果別人給你一大堆報文,可以用utools(一個軟體),直接複製進去,就可以清楚的看到json格式了,很方便。
裝json:
var json = {"json":{"json":{
"json":11
}
}
}
哈哈,所謂套娃,就是可以在值那裡一直用json,所以想拿到11,就需要通過:json.json.json.json,就能取到11了,不過這只是一個演示,除非真的有這樣的需求,要不然還是不要這麼玩兒,他畢竟只是一個容器,以盛裝數據並且簡潔易懂為主。
為什麼需要JSON?
等到去了公司做前後端分離的項目的時候,大家會發現前端與後端交互大部分都是介面(其實就是用json裝的一些數據),舉個栗子,用戶在瀏覽器輸入了用戶名和密碼要登錄,這個輸入的用戶名和密碼肯定會發到後台,後台進行一系列的處理並且給前台反饋結果,畫個圖就是這樣的:
總之前後端交互就是通過json報文,可以聯想一下最開始學javaWeb的時候我們是怎麼進行前後端交互的:
String name = request.getParameter("name");
String pwd = request.getParameter("pwd");
有沒有引起你的某種回憶,哈哈~
為什麼不建議用servlet進行接收前端的數據呢?一個是負載壓力大,後端成了爹了,啥都要管,權重非常高,你每次接收前台的數據都需要初始化載入servlet各種亂七八糟的東西,之後才能進行處理;第二是耦合太高,等你花了半天勁寫完了代碼,需求發生變更,你要改controller層、dao層、service層,該改的不該改的你都得改,體驗過的童鞋麻煩點個贊。。
總結
大家可以看到,通過json,非常方便快捷地把一些複雜的對象和數據進行發送。每個公司肯定都對前端的ajax進行了封裝,所以不需要每次都
$(document).ready(function(){
var saveDataAry=[];
var data1={"userName":"zhangsan","address":"bj"};
var data2={"userName":"lisi","address":"nj"};
saveDataAry.push(data1);
saveDataAry.push(data2);
$.ajax({
type:"POST",
url:"userInfo/userUpd",
dataType:"json",
contentType:"application/json",
data:JSON.stringify(saveData),
success:function(data){
... ...
}
});
});
使用起來也非常的方便~
另外阿里巴巴有一個fastjson,可以非常快速地把json序列化和反序列化:
String text = JSON.toJSONString(obj); //序列化
VO vo = JSON.parseObject("{...}", VO.class); //反序列化
大家可以試一下。