`

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:欢迎转贴,但请务必在页面显眼处加个链接注明出处,请尊重作者的成果^_^

分享到:
评论

相关推荐

    GRIB2 数据 转 JSON

    转换后的JSON数据可以轻松地被JavaScript或Python的JSON库解析,进而用于数据分析、地图绘制或其他应用程序。对于开发人员来说,这大大降低了处理GRIB2数据的门槛,特别是对于不熟悉GRIB2编码的用户。 值得注意的是...

    易语言源码易语言json编码解码模块源码.rar

    本压缩包文件"易语言源码易语言json编码解码模块源码.rar"提供的是易语言环境下用于处理JSON数据的编码和解码模块的源代码。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛应用于Web服务和...

    json转lua-table工具

    Python有内置的`json`模块,可以方便地处理JSON数据的编码和解码。该脚本的工作原理可能是读取JSON文件,使用`json.load()`或`json.loads()`函数解析JSON数据,然后将解析得到的Python字典或其他数据结构转化为Lua...

    实现protobuf与json的互转

    标题中的“实现protobuf与json的互转”是指在软件开发中,如何将使用Protocol Buffers(protobuf)编写的结构体数据转换成JSON格式,反之亦然。Protocol Buffers是Google推出的一种数据序列化协议,而JSON...

    grib2json--grib2文件转换成json格式

    标题 "grib2json -- 将grib2文件转换为json格式" 描述...综上所述,grib2json转换涉及到气象数据存储格式、数据解析技术、json数据交换格式以及软件工具的使用,对于理解和处理气象数据的科研和业务工作具有重要意义。

    基于单片机的json编解码源码.zip

    JSON(JavaScript Object ...总之,这个基于C语言的JSON编解码工具为STM32等单片机提供了强大的功能,能够帮助开发者轻松地处理JSON数据。通过理解和适配源码,你可以将其集成到你的项目中,实现高效的数据通信和存储。

    cpp-qtjson用于JSON数据和QVariant层次间的相互解析的简单类

    8. **编码与解码**: JSON数据通常是UTF-8编码的,`cpp-qtjson`在处理时需要确保正确处理字符编码,防止出现乱码问题。 9. **线程安全**: 如果你的应用是多线程的,你需要确保`cpp-qtjson`库在设计时考虑了线程安全...

    GRIB2 转 Json

    3. **数据编码**: GRIB2中的数值可能以不同方式编码,工具需要解码这些数值并转换为JSON能理解的格式。 4. **时间和地理坐标处理**: GRIB2可能包含复杂的时空坐标系统,工具需将其转换为标准的经纬度或时间戳。 5. *...

    json.web技术

    1. **编码和解码**:在JavaScript中,可以使用`JSON.stringify()`将JavaScript对象转换成JSON字符串,而`JSON.parse()`则可以将JSON字符串解析成JavaScript对象。 2. **安全性**:JSON数据可能暴露敏感信息,因此在...

    protobuf转换为json

    综上所述,protobuf转换为json是一个涉及编码、解码、数据格式转换、错误处理和性能优化等多个技术环节的过程。在实际应用中,开发者不仅需要掌握protobuf和JSON的语法,还要对相关转换库有深入的理解,以便在遇到...

    Python3 JSON 数据解析.pdf

    在Python3中,可以通过内置的`json`模块来处理JSON数据,实现数据的序列化(编码)和反序列化(解码)操作。 #### JSON与Python的数据类型对应关系 在处理JSON数据时,了解Python的基本数据类型与JSON数据类型的...

    二维码扫描,上传JSON

    JSON数据结构通常包括键值对,键用引号括起,值可以是各种数据类型,如字符串、数字、布尔值、数组或嵌套的JSON对象。例如: ```json { "name": "张三", "age": 30, "address": { "city": "北京", "province":...

    Delphi XE + IdHTTPServer + utf8转换 + json解析(源码+测试可用)

    通过分析和运行提供的源码,你可以了解如何配置IdHTTPServer组件,如何处理HTTP请求,如何进行字符串编码转换,以及如何有效地解析和生成JSON数据。 总之,这个项目涵盖了使用Delphi XE开发HTTP服务器的基本技术,...

    json系列文章——json的使用

    8. JSON-P(JSON with Padding):JSON-P是一种跨域数据获取的技术,通过动态插入script标签,将JSON数据包裹在一个函数调用中,从而规避浏览器同源策略的限制。 9. JSON-LD(JSON for Linking Data):这是一种...

    DataSnap通过json上传clientdataset数据集到服务端并解释

    标题 "DataSnap通过json上传clientdataset数据集到服务端并解释" 涉及到的是在IT领域中,特别是Delphi开发环境下,使用...同时,熟悉JSON的编码和解码机制也是必要的,因为它是现代网络通信中常见的数据交换格式。

    python 将json数据,转化为图片

    在Python编程中,将JSON数据转化为图片是一种独特的技术,它通常用于可视化数据或者在某些情况下保护数据不被轻易篡改。这个过程涉及到读取JSON文件,解析数据,然后使用base64编码进行图像处理。接下来,我们将深入...

    json格式读写+base64加密 C++

    在这个场景下,我们关注的是如何在C++中处理JSON格式的数据以及进行Base64编码和解码,这些都是现代网络通信和数据存储中常见的技术。 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它易于人...

    base64编码解码

    Base64编码是一种在网络上传输二进制数据时常用的数据编码方式,主要目的是将不可打印的二进制数据转换为可打印的ASCII字符,以便在邮件、网页等文本环境中进行传输。Base64编码的基本原理是将每3个8位字节(24位)...

    PB Json解析库

    PB Json解析库就是结合了这两种技术的工具,它允许开发者将PB编码的数据转换成JSON格式,以便在不支持PB的环境中进行交互,或者为了调试和展示目的。同样,该库也能将JSON格式的数据解析回PB,以供PB系统使用。这个...

    JSON FOR PHP4.0 PHP JSON操作 Services_JSON

    这个类可能包含了编码和解码JSON的实例方法,以及可能的错误处理和优化功能。在PHP 5.0及更高版本中,`json_encode`和`json_decode`是全局函数,但在PHP 4.0中,它们被封装在一个类中以保持代码的组织性和可维护性。...

Global site tag (gtag.js) - Google Analytics