JSON是現代Open Data精神下,得以流通在HTTP協定下的產物,他強調資料的單純傳輸的概念下,讓宣告繁複的XML產生了極大的衝擊,有鑑於人老了每次要宣告比較複雜的JSON Object都會忘記的情況下,把一些資料整理在這邊日後好回憶。
利用Javascript宣告一個物件,並操作之:
//定義 var myCar = { "Name": "BMW", "Number": "GY-5978", "Specification": [{ "model" : "A", "length": 100, "weight": 200 },{ "model" : "B", "length": 300, "weight": 400 } ] }; //操作 myCar.name = "Mercedes Benz"; myCar.Specification[0].weight = 250; myCar.Specification[1].length = 350;
操作完當然是用AJAX把他給POST出去了,如果你在jQuery中要AJAX直接把這個myCar物件帶進去POST,那麼jQuery會自動幫你轉成name=Mercedes%20Benz&Number=GY-5978...等資訊丟出去,這通常不會是我們要的,因此你需要調用JSON.stringify()來進行轉換嘍!這個動作在現代的程式語言中通常稱為「序列化」。
$(document).ready(function(){ $("#btnSubmit").click(function(){ $.ajax({ url: "http://your.url/", type: "post", contentType: "application/json", //注意!單靠這一行是不會幫你自動轉換JSON的 dataType: "json", //注意!單靠這一行也是不會幫你自動轉換JSON的 data: JSON.stringify(myCar), //注意!這一行直接帶myCar是不會幫你自動轉換JSON的 timeout: 3000, //等候3秒逾時 beforeSend: function () { //送出前 }, success: function (oDataResponse) { //成功 if (oDataResponse.length != 0) { $(oDataResponse).each(function (i, v) { //處理 }); } }, error: function (xmlhttprequest, textstatus, message) { //失敗 if (textstatus == "timeout") { //逾時 } else { //其他錯誤 } } }); }); });
值得一提的是,在success後傳回的data,如果你是使用jQuery的情況下,可以直接使用像data.success之類的方式來調用回傳資訊。如果你是屬於比較小心一點的使用者,那麼可以考慮使用JSON.parse()來驗證一下嘍!
下方式宣告一個單一陣列型的物件,經過JSON.parse()無誤後,開始使用的範例。
var pets = '[{"name":"jack"}, {"name":"john"}, {"name":"joe"}]'; var arr = JSON.parse(pets); alert(arr[0].name);
很簡單,先直接串流把資料讀進來後,請我們的好朋友JSON.NET來幫忙即可(在這裡沒有另外建立ORM,而是採用匿名型別來餵給JSON.NET)。
var oData = new { Name = "", Number = "", Specification = new[] { new { model = "", length = -1, weight = -1 } } }; try { using (System.IO.StreamReader oSR = new System.IO.StreamReader(Request.InputStream)) { string cTemp = oSR.ReadToEnd(); Newtonsoft.Json.Linq.JObject.Parse(cTemp); //如果JSON驗證沒通過,會丟Exception錯誤 oData = Newtonsoft.Json.JsonConvert.DeserializeAnonymousType(cTemp, oData); } } catch { //DoSomething... }JavaScript JSON Array ObjectAccess JSON.stringify JSON.parse jQuery