1. 程式人生 > >JSON資料編碼解碼技術

JSON資料編碼解碼技術

1.客戶端JSON物件和字串之間的轉換和引用(JavaScript):

從官網下載:json.js,放在/js目錄下

裡面提供了一些JAVASCRIPT函式實現 JSON Object 和Json Text之間的相互轉換。

它裡面雖然程式碼眾多,但是供外界呼叫的也只有兩個函式――一個編碼函式一個解碼函式:

value, replacer, space);//後面兩個引數是可選項

JSON.parse(text, reviver);//後面的引數是可選項

呼叫方法示例:

var jsonText = ; //把json編碼成text

var jsonObject =;/把text解碼成json

Json2String.html:將json編碼成string

Json2String 複製程式碼

   
    <!
    DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    >
     
    <
    html
    >
     
    <
    head
    >
     
    <
    title
    >
    My JSP '1.jsp' starting page
</ title > < script type ="text/javascript" src ="js/json.js" ></ script > </ head > < body > < script type ="text/javascript" > function test() {
var myObject = { " bindings " : [ { " ircEvent " : " PRIVMSG " , " method " : " newURI " , " regex " : " ^http://.* " }, { " ircEvent " : " PRIVMSG " , " method " : " deleteURI " , " regex " : " ^delete.* " }, { " ircEvent " : " PRIVMSG " , " method " : " randomURI " , " regex " : " ^random.* " } ] }; var myJSONText = JSON.stringify(myObject); alert( " 自我測試 " + myJSONText); } </ script > < input type ="button" onClick ="test()" value ="使用這個script" /> </ body > </ html > 複製程式碼

String2Json.html:將string解碼成Json

String2Json 複製程式碼

   
    <!
    DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    >
     
    <
    html
    >
     
    <
    head
    >
     
    <
    title
    >
    My JSP '1.jsp' starting page
    </
    title
    >
     
    <
    script 
    type
    ="text/javascript"
     src
    ="js/json.js"
    ></
    script
    >
     
    </
    head
    >
     
    <
    body
    >
     
    <
    script 
    type
    ="text/javascript"
    >
     
    function
     myEval() { 
    var
     myJSONtext 
    =
     
    '
    { "name": "Violet", "occupation": "character" }
    '
    ; 
    var
     myObject 
    =
     JSON.parse(myJSONtext); alert(myObject.name); alert(myObject[
    3
    ]); } 
    </
    script
    >
     
    <
    script 
    type
    ="text/javascript"
    >
     
    var
     json
    =
    { 
    "
    id1
    "
    :{
    "
    name
    "
    :
    "
    張三
    "
    ,
    "
    sex
    "
    :
    "
    
    "
    }, 
    "
    student2
    "
    :{
    "
    name
    "
    :
    "
    老四
    "
    ,
    "
    sex
    "
    :
    "
    
    "
    }, 
    "
    id3
    "
    :{
    "
    name
    "
    :
    "
    王五
    "
    ,
    "
    sex
    "
    :
    "
    
    "
    } } ; 
    //
    debugger;
     
    recurJson(json); 
    function
     recurJson(json) { 
    for
    (
    var
     i 
    in
     json){ 
    if
    (
    typeof
     json[i]
    ==
    "
    object
    "
    ){ document.write(i
    +
    "
     <br>
    "
    ); } } } 
    </
    script
    >
     
    <
    input 
    type
    ="button"
     onClick
    ="myEval()"
     value
    ="使用這個script"
     
    />
     
    </
    body
    >
     
    </
    html
    >
    
   
    複製程式碼
    
   
  
 

下面的這段方法是在客戶端提取Josn的Key物件:

程式碼

 

2.伺服器端JSON物件和字串之間的轉換和引用(C#):

從官網上下載JSON.cs,放在App_Code檔案目錄下

裡面提供了一些基於C#的函式實現Json Text和 C# Object之間的相互轉換。

裡面函式雖然眾多,但是直接給外部呼叫的只有兩個:


  
   public
    
   static
    
   object
    JsonDecode(
   string
    json) 
   public
    
   static
    
   string
    JsonEncode(
   object
    json) 
   
  
 

呼叫方法示例:

複製程式碼

  
   //
   Hashtable資料表編碼成json字串
    
   Hashtable mySourceTotal 
   =
    
   new
    Hashtable();
   //
   承載資料的雜湊表。
    
   string
    strEnCode 
   =
    JSON.JsonEncode((
   object
   )mySourceTotal);
   //
   編碼成字串成功了 
   //
   json字串解碼成Hashtable資料表
    
   object
    arrayObj; arrayObj 
   =
    
   new
    Hashtable(); arrayObj 
   =
    JSON.JsonDecode(str_QuertConditon); 
   
  
   複製程式碼
   
  
 

3.對中文的支援

3.1伺服器端編碼-客戶端解碼

伺服器端的“JSON.cs”檔案提供的方法,對中文編碼有良好的支援,在編碼時,伺服器端會自動將中文編碼成其對應的Unicode代號。

經過JSON.CS編碼:

複製程式碼

  
   private
    
   string
    getRenderCode(
   string
    str_Select_BDZ_Value) { DBOperator.DBShell dbShell 
   =
    
   new
    DBOperator.DBShell();
   //
   引用 資料庫操作的dll檔案
    
    
   if
    (dbShell 
   ==
    
   null
   ) dbShell 
   =
    
   new
    DBOperator.DBShell(); 
   string
    strCmd 
   =
    
   "
   select * from SB_XL_H WHERE nparentid='
   "
    
   +
    str_Select_BDZ_Value 
   +
    
   "
   '
   "
   ; DataTable dt_hmc 
   =
    dbShell.OleDbDtExecuteSelectCmd(strCmd);
   //
   環名稱 資料表
    
    dt_hmc.TableName 
   =
    
   "
   環名稱
   "
   ; 
   //
   現在開始編碼 
   //
    Creates and initializes the source Hashtable.
    
    Hashtable mySourceHT 
   =
    
   new
    Hashtable(); 
   for
    (
   int
    i 
   =
    
   0
   ; i 
   <
    dt_hmc.Rows.Count;i
   ++
   ) { mySourceHT.Add(dt_hmc.Rows[i][
   "
   XL_H_MC
   "
   ], dt_hmc.Rows[i][
   "
   XL_H_BH
   "
   ]); } 
   string
    strEnCode 
   =
    JSON.JsonEncode((
   object
   )mySourceHT);
   //
   編碼成字串成功了,然後就能通過ICALLBACK來進行非同步傳送了。
    
    
   return
    strEnCode;
   //
   將編碼成JSON的字串返回
    
    } 
   
  
   複製程式碼
   
  
 

mySourceHT雜湊表的內容為:

城市花園線: "10031"

 柘電線: "10004"

 橋北環: "10002"

橋西環: "10001"

潯陽江畔線: "10030"

經過JSON.JsonEncode((object)mySourceHT);編碼後得到strEnCode,檢視中間變數值,發現strEnCode裡面的中文欄位全部變成了UniCode代號,其值如下:

{"\u57ce\u5e02\u82b1\u56ed\u7ebf":"10031",

"\u67d8\u7535\u7ebf":"10004",

"\u6d54\u9633\u6c5f\u7554\u7ebf":"10030",

"\u6865\u5317\u73af":"10002", "\u6865\u897f\u73af":"10001"

}

這樣的字串經過非同步通訊傳遞到客戶端後,由JavaScript函式承接

客戶端示例程式碼:

 

複製程式碼

  
   function Select_BianDianZhan_CallBackComplete(result) { var myObject = JSON.parse(result);//把text轉換成json var rs=""; var k=0; var ddl_HMC= document.getElementById("DDL_HuanMingchen");//統計條件下拉框 的當前值 // debugger; for(var i in myObject){ if(typeof myObject[i]=="string"){ rs+=i+';'; } } var BDZ_Text=rs.split(';');//得到了所有的options的Text了 alert(rs); } 
   
  
   複製程式碼
   
  
 

 


例如:json字串傳遞過來至引數result中,經過var myObject = JSON.parse(result);解碼後就變成了如下結果:

 

myObject

{...}

城市花園線: "10031"

柘電線: "10004"

橋北環: "10002"

橋西環: "10001"

潯陽江畔線: "10030"

所以,中文字元從伺服器端傳遞到客戶端時,不需要採取任何額外的措施就可以完成中文字元的傳輸。

3.2客戶端編碼-伺服器端解碼

客戶端對中文編碼的處理:

//下面的字元全部用UNICODE進行編碼

"TB_SheBeiMC_Value":(TB_SheBeiMC_Value),

"TB_ShengChanCJ_Value":escape(TB_ShengChanCJ_Value),

對於中文輸入,需要經過函式處理後再進行json編碼,否則就出現亂碼了。

伺服器端中文解碼處理:

//下面的幾個變數要進行UNICODE的編碼的解碼

string TB_SheBeiMC_Value = (hstb["TB_SheBeiMC_Value"].ToString());

string TB_ShengChanCJ_Value = HttpContext.Current.Server.UrlDecode(hstb["TB_ShengChanCJ_Value"].ToString());//對Unicode進行解碼--對應的JS函式是escape()

伺服器端用HttpContext.Current.Server.UrlDecode()函式就可以將客戶端escape()函式的處理效果轉碼成中文,這樣就完成了中文從客戶端到伺服器端的傳送了。

最後附一張JSON編碼解碼流程圖:

image

-----------------------------------------------


金鑰,一次性密碼加密系統軟體,視訊切割、轉換、合成系統軟體開發,語音視訊聊天,語音識別軟體開發,android觸控手機軟體開發,公司內部關公系統開發,時時彩,彩票系統開發(OR,CRM,ERP等)