首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

JSON跟byte[]

2012-11-10 
JSON和byte[]Json在Ajax中已得到广泛的应用。相比XML,它有如下的优点: 1. 数据格式比较简单, 易于读写, 格

JSON和byte[]

Json在Ajax中已得到广泛的应用。相比XML,它有如下的优点:

 

1. 数据格式比较简单, 易于读写, 格式都是压缩的, 占用带宽小;

2. 易于解析这种语言, 客户端Javascript可以简单的通过eval()进行JSON数据的读取;

3. 支持多种语言, 包括Actionscript, C, C#, ColdFusion, Java, Javascript, Perl, PHP, Python, Ruby等语言服务器端语言, 便于服务器端的解析;

4. 在PHP世界, 已经有PHP-JSON和JSON-PHP出现了, 便于PHP序列化后的程序直接调用. PHP服务器端的对象、数组等能够直接生JSON格式, 便于客户端的访问提取。

 

         除了BS模式,CS模式自然也可以使用JSON的格式。毕竟,我们可以简单的将其视为一个hashmap。那么,与一般的传送byte[]方式比较,JSON的优劣又体现在哪里?

带宽算劣势么?直接的JSON文本显然比byte[]占用更多空间,但JSON的格式在传送时候是压缩的,会不会有改善?

解析。JSON对多种语言提供了支持,便于解析。而python的pack和unpack风格,需要我们在各种语言中自行构建代码来支持。

 

 

 

这是一个java对python的struct.unpack的模拟。当然,经过改良,我们可以相信其可以具有更好的可读性。类似如下的形式:

 

         String rule = "4!i1!i1!i…"

 

         至少在基本类型的处理上,我认为此形式可以很好的表达CS两端通信的接口。视此rule,则通信规则已了然于心。

         需要注意的地方在与‘变长’和‘复杂类型’。

         当传递一个变长字符串。可能需要如下的结构:

 

Len+Body

 

这样让我们的rule写起来就会费事。又如传递一个未知size的List,也是一个难处理的任务。

 

         下面有一个简单的例子。Server端用python接收数据,以unpack方式接收数据,并以MysqlDB插入Mysql数据库;Client端用Erlang发送数据,以list_to_binary发送数据。

 

 

 

 

 

 

 

         很明显Python本身的基础unpack在解决一些复杂问题时候力有不逮。struct模块允许创建一个等效于C结构的字符串,可以读写那些非Python程序生成的二进制文件。或者用于不同程序的网络通信。

         在其他语言中,我们完全可以为变长类型和复杂类型定义新的标示,如“2X”,或者“nList”等等。

 

         总而言之,JSON系列和byte[]系列的处理,进过一些考虑和工具类的构建,应该为各自找到较合适的应用场景。

 

热点排行