項目拾遺——JSon再體驗

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:
Last Name:

<script type="text/javascript"> document.getElementById("fname").innerHTML = obj.employees[1].firstName document.getElementById("lname").innerHTML = obj.employees[1].lastName </script>

  四、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 
0) { jsonBuilder.Remove(jsonBuilder.Length - 1, 1); } jsonBuilder.Append("},"); } if (dt.Rows.Count > 0) { jsonBuilder.Remove(jsonBuilder.Length - 1, 1); } return jsonBuilder.ToString(); } #endregion dataTable轉換成Json格式 }

HTML,傳遞給前臺HTML界面:

用戶姓名 認證機構 認證信息 時間 審閱狀態 通知 是否認證

  註意
    1、其中的field是獲取的Json字符串中對應的值
    2、url是該頁面調用的一般處理程序所在的路徑

五、小結

  通過簡單的例子和在項目中的實踐:

    我們可以知道Json就是一種JavaScript的數據傳輸格式;

    簡單的瞭解和實踐瞭Json的語法格式,創建,調用;

    如何將從數據庫獲取的Dataset或是Datatable類型的數據轉化為Json類型;

  至於其優缺點以及技巧,需要在以後的實踐中加以自己的理解和體會~~~

You May Also Like