JSON:JavaScript 對象表示法(JavaScript Object Notation),是輕量級的文本數據交換格式,也是基於純文本的數據格式。由於 JSON 天生是為 JavaScript 準備的,因此,JSON 的數據格式非常簡單,您可以用 JSON 傳輸一個簡單的 String,Number,Boolean,也可以傳輸一個數組,或者一個復雜的 Object 對象。說白瞭,JSon就是一個JavaScript的數據傳輸格式或說標準。
一、JSON似而不是XML:
似:
JSON 是純文本
JSON 具有“自我描述性”
JSON 具有層級結構(值中存在值)
JSON 可通過 JavaScript 進行解析
JSON 數據可使用 AJAX 進行傳輸
不是:
沒有結束標簽
更短
讀寫的速度更快
能夠使用內建的 JavaScript eval() 方法進行解析
使用數組
不使用保留字
當然,這些都是官方的說法,至於具體的體驗在後面的例子中會有~~~
二、語法規則:
數據在名稱/值對中:”firstName” : “John”
數據由逗號分隔:{ “firstName”:”John” , “lastName”:”Doe” }
花括號保存對象:
{“employees”: [
{ “firstName”:”John” , “lastName”:”Doe” },
{ “firstName”:”Anna” , “lastName”:”Smith” },
{ “firstName”:”Peter” , “lastName”:”Jones” }
]
}
方括號保存數組:
”employees”: [
{ “firstName”:”John” , “lastName”:”Doe” },
{ “firstName”:”Anna” , “lastName”:”Smith” },
{ “firstName”:”Peter” , “lastName”:”Jones” }
]
最基本的格式問題,會用即可。
三、初級入門
1 創建包含JSON語法的JavaScript字符串
var txt = '{ "employees" : [' + '{ "firstName":"Bill" , "lastName":"Gates" },' + '{ "firstName":"George" , "lastName":"Bush" },' + '{ "firstName":"Thomas" , "lastName":"Carter" } ]}';
2 使用Eval()進行解析:
var obj = eval ("(" + txt + ")");
3 在網頁中使用JavaScript對象:
First Name:
<script type="text/javascript"> document.getElementById("fname").innerHTML = obj.employees[1].firstName document.getElementById("lname").innerHTML = obj.employees[1].lastName </script>
Last Name:
四、JSon在項目中
C#代碼:
public void Query(HttpContext context) { context.Response.ContentType = "text/plain"; //=============================================================== //獲取查詢條件:【用戶id,開始時間,結束時間,關鍵字】 string category, startTime, endTime, key; category = startTime = endTime = key = ""; if (null != context.Request.QueryString["Category"]) { category = context.Request.QueryString["Category"].ToString().Trim(); } if (null != context.Request.QueryString["StartTime"]) { startTime = context.Request.QueryString["StartTime"].ToString().Trim(); } if (null != context.Request.QueryString["EndTime"]) { endTime = context.Request.QueryString["EndTime"].ToString().Trim(); } //if (null != context.Request.QueryString["KeyWord"]) //{ // key = context.Request.QueryString["KeyWord"].ToString().Trim(); //} //================================================================ //獲取分頁和排序信息:頁大小,頁碼,排序方式,排序字段 int pageRows, page; pageRows = 10; page = 1; string order, sort, oderby; order = sort = oderby = ""; if (null != context.Request.QueryString["rows"]) { pageRows = int.Parse(context.Request.QueryString["rows"].ToString().Trim()); } if (null != context.Request.QueryString["page"]) { page = int.Parse(context.Request.QueryString["page"].ToString().Trim()); } if (null != context.Request.QueryString["sort"]) { order = context.Request.QueryString["sort"].ToString().Trim(); } if (null != context.Request.QueryString["order"]) { sort = context.Request.QueryString["order"].ToString().Trim(); } //=================================================================== //組合查詢語句:條件+排序 StringBuilder strWhere = new StringBuilder(); //if (key != "") //{ // strWhere.AppendFormat(" ScoreLevel like '%{0}%' and ", key); //} if (category != "") { strWhere.AppendFormat(" ExamineSign= '{0}' and ", category); } if (startTime != "") { strWhere.AppendFormat(" PublishDate >= '{0}' and ", startTime); } if (endTime != "") { strWhere.AppendFormat(" PublishDate = 0) { strWhere.Remove(startindex, 3);//刪除多餘的and關鍵字 } if (sort != "" && order != "") { //strWhere.AppendFormat(" order by {0} {1}", sort, order);//添加排序 oderby = order + " " + sort; } //DataSet ds = Bnotice.GetList(strWhere.ToString()); //調用不分頁的getlist //調用分頁的GetList方法 DataSet ds = useractive.GetListByPage(strWhere.ToString(), oderby, (page - 1) * pageRows + 1, page * pageRows); int count = useractive.GetRecordCount(strWhere.ToString()); // 通過ToJson將獲取的Dataset格式的數據類型,轉化為JSON類型 string strJson = ToJson.Dataset2Json(ds, count); context.Response.Write(strJson); context.Response.End();
C#,ToJson類:將獲取的Dataset類型或者是Datatable類型的數據進行轉化為Json類型
public class ToJson { #region DataSet轉換成Json格式 ////// DataSet轉換成Json格式 /// /// DataSet /// public static string Dataset2Json(DataSet ds, int total = -1) { StringBuilder json = new StringBuilder(); foreach (DataTable dt in ds.Tables) { //{"total":5,"rows":[ json.Append("{\"total\":"); if (total == -1) { json.Append(dt.Rows.Count); } else { json.Append(total); } json.Append(",\"rows\":["); json.Append(DataTable2Json(dt)); json.Append("]}"); } return json.ToString(); } #endregion #region dataTable轉換成Json格式 ////// dataTable轉換成Json格式 /// /// /// public static string DataTable2Json(DataTable dt) { StringBuilder jsonBuilder = new StringBuilder(); for (int i = 0; i < dt.Rows.Count; i++) { jsonBuilder.Append("{"); for (int j = 0; j
HTML,傳遞給前臺HTML界面:
用戶姓名 | 認證機構 | 認證信息 | 時間 | 審閱狀態 | 通知 | 是否認證 |
---|
註意
1、其中的field是獲取的Json字符串中對應的值
2、url是該頁面調用的一般處理程序所在的路徑
五、小結
通過簡單的例子和在項目中的實踐:
我們可以知道Json就是一種JavaScript的數據傳輸格式;
簡單的瞭解和實踐瞭Json的語法格式,創建,調用;
如何將從數據庫獲取的Dataset或是Datatable類型的數據轉化為Json類型;
至於其優缺點以及技巧,需要在以後的實踐中加以自己的理解和體會~~~