JSON資料編碼解碼技術
1.客戶端JSON物件和字串之間的轉換和引用(JavaScript):
從官網下載:json.js,放在/js目錄下
裡面提供了一些JAVASCRIPT函式實現 JSON Object 和Json Text之間的相互轉換。
它裡面雖然程式碼眾多,但是供外界呼叫的也只有兩個函式――一個編碼函式一個解碼函式:
value, replacer, space);//後面兩個引數是可選項 JSON.parse(text, reviver);//後面的引數是可選項 |
呼叫方法示例:
var jsonText = ; //把json編碼成text |
Json2String.html:將json編碼成string
Json2String <! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" > < html > < head > < title > My JSP '1.jsp' starting pageString2Json.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編碼,否則就出現亂碼了。
伺服器端中文解碼處理:
伺服器端用HttpContext.Current.Server.UrlDecode()函式就可以將客戶端escape()函式的處理效果轉碼成中文,這樣就完成了中文從客戶端到伺服器端的傳送了。
最後附一張JSON編碼解碼流程圖:
-----------------------------------------------
金鑰,一次性密碼加密系統軟體,視訊切割、轉換、合成系統軟體開發,語音視訊聊天,語音識別軟體開發,android觸控手機軟體開發,公司內部關公系統開發,時時彩,彩票系統開發(OR,CRM,ERP等)