`

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

复制代码
<!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

复制代码
<!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之间的相互转换。

里面函数虽然众多,但是直接给外部调用的只有两个:

publicstaticobject JsonDecode(string json)
publicstaticstring 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编码:

复制代码
privatestring 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

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

Author:一点一滴的Beer

Email /Gtalk:dreamzsm@gmail.com

From:http://www.cnblogs.com/beer

Notes:欢迎转贴,但请务必在页面显眼处加个链接注明出处,请尊重作者的成果^_^

分享到:
评论

相关推荐

    微控制器 的 Json 二进制编码_C++_代码_相关文件_下载

    Protoson 是一个用于以二进制格式对非结构化数据进行编码和解码的库。类似于 JSON,但又快又小。Protoson 基于一些 Protocol Buffers 编码技术,但它在网络上不兼容。但是,您可以将 protoson 输出嵌入到任何 ...

    20.Twisted获取响应数据.zip

    文本文件编码和解码 数据存储与持久化 数据库的使用和操作(如MySQL、MongoDB等) 数据存储格式的选择和优化 实际案例分析 应用所学知识解决真实世界中的爬虫和IO问题 爬虫和IO项目开发流程与实践经验分享

    Hadoop硬实战 [(美)霍姆斯著][电子工业出版社][2015.01]_PDF电子书下载 带书签目录 高清完整版.rar )

    技术点25 选择合适的压缩解码器 技术点26 在HDFS、MapReduce、Pig 和Hive 中使用数据压缩 技术点27 在MapReduce、Hive 和Pig 中处理可分割的LZOP 5.3 本章小结 6 诊断和优化性能问题 6.1 衡量MapReduce 和...

    Hadoop实战(第2版)

    4.4 本章小结5 优化HDFS 处理大数据的技术5.1 处理小文件技术点24 使用Avro 存储大量小文件5.2 通过压缩提高数据存储效率技术点25 选择合适的压缩解码器技术点26 在HDFS、MapReduce、Pig 和Hive 中使用...

    4.利用线程池执行Task.zip

    文本文件编码和解码 数据存储与持久化 数据库的使用和操作(如MySQL、MongoDB等) 数据存储格式的选择和优化 实际案例分析 应用所学知识解决真实世界中的爬虫和IO问题 爬虫和IO项目开发流程与实践经验分享

    21.Twisted并发.zip

    文本文件编码和解码 数据存储与持久化 数据库的使用和操作(如MySQL、MongoDB等) 数据存储格式的选择和优化 实际案例分析 应用所学知识解决真实世界中的爬虫和IO问题 爬虫和IO项目开发流程与实践经验分享

    5.协程的嵌套.zip

    文本文件编码和解码 数据存储与持久化 数据库的使用和操作(如MySQL、MongoDB等) 数据存储格式的选择和优化 实际案例分析 应用所学知识解决真实世界中的爬虫和IO问题 爬虫和IO项目开发流程与实践经验分享

    10.Greenlet与Yield对比.zip

    文本文件编码和解码 数据存储与持久化 数据库的使用和操作(如MySQL、MongoDB等) 数据存储格式的选择和优化 实际案例分析 应用所学知识解决真实世界中的爬虫和IO问题 爬虫和IO项目开发流程与实践经验分享

    1.Python异步库使用介绍.zip

    文本文件编码和解码 数据存储与持久化 数据库的使用和操作(如MySQL、MongoDB等) 数据存储格式的选择和优化 实际案例分析 应用所学知识解决真实世界中的爬虫和IO问题 爬虫和IO项目开发流程与实践经验分享

    16.Twisted模块介绍.zip

    文本文件编码和解码 数据存储与持久化 数据库的使用和操作(如MySQL、MongoDB等) 数据存储格式的选择和优化 实际案例分析 应用所学知识解决真实世界中的爬虫和IO问题 爬虫和IO项目开发流程与实践经验分享

    15.tornado的httpclient模块使用介绍.zip

    文本文件编码和解码 数据存储与持久化 数据库的使用和操作(如MySQL、MongoDB等) 数据存储格式的选择和优化 实际案例分析 应用所学知识解决真实世界中的爬虫和IO问题 爬虫和IO项目开发流程与实践经验分享

    23.Celery模块介绍.zip

    文本文件编码和解码 数据存储与持久化 数据库的使用和操作(如MySQL、MongoDB等) 数据存储格式的选择和优化 实际案例分析 应用所学知识解决真实世界中的爬虫和IO问题 爬虫和IO项目开发流程与实践经验分享

    19.Agent模块发送请求.zip

    文本文件编码和解码 数据存储与持久化 数据库的使用和操作(如MySQL、MongoDB等) 数据存储格式的选择和优化 实际案例分析 应用所学知识解决真实世界中的爬虫和IO问题 爬虫和IO项目开发流程与实践经验分享

    24.Celery使用(一).zip

    文本文件编码和解码 数据存储与持久化 数据库的使用和操作(如MySQL、MongoDB等) 数据存储格式的选择和优化 实际案例分析 应用所学知识解决真实世界中的爬虫和IO问题 爬虫和IO项目开发流程与实践经验分享

    18.Twisted的Defered.zip

    文本文件编码和解码 数据存储与持久化 数据库的使用和操作(如MySQL、MongoDB等) 数据存储格式的选择和优化 实际案例分析 应用所学知识解决真实世界中的爬虫和IO问题 爬虫和IO项目开发流程与实践经验分享

    14.Tornado了解.zip

    文本文件编码和解码 数据存储与持久化 数据库的使用和操作(如MySQL、MongoDB等) 数据存储格式的选择和优化 实际案例分析 应用所学知识解决真实世界中的爬虫和IO问题 爬虫和IO项目开发流程与实践经验分享

    2.Asyncio模块介绍.zip

    文本文件编码和解码 数据存储与持久化 数据库的使用和操作(如MySQL、MongoDB等) 数据存储格式的选择和优化 实际案例分析 应用所学知识解决真实世界中的爬虫和IO问题 爬虫和IO项目开发流程与实践经验分享

    6.Task的取消.zip

    文本文件编码和解码 数据存储与持久化 数据库的使用和操作(如MySQL、MongoDB等) 数据存储格式的选择和优化 实际案例分析 应用所学知识解决真实世界中的爬虫和IO问题 爬虫和IO项目开发流程与实践经验分享

    22.Twisted使用总结.zip

    文本文件编码和解码 数据存储与持久化 数据库的使用和操作(如MySQL、MongoDB等) 数据存储格式的选择和优化 实际案例分析 应用所学知识解决真实世界中的爬虫和IO问题 爬虫和IO项目开发流程与实践经验分享

    17.Twisted的抽象层.zip

    文本文件编码和解码 数据存储与持久化 数据库的使用和操作(如MySQL、MongoDB等) 数据存储格式的选择和优化 实际案例分析 应用所学知识解决真实世界中的爬虫和IO问题 爬虫和IO项目开发流程与实践经验分享

Global site tag (gtag.js) - Google Analytics