日期:2014-05-16  浏览次数:20339 次

Thrift之TProtocol类体系原理及源码详细解析之JSon协议类TJSONProtocol

我的新浪微博:http://weibo.com/freshairbrucewoo。

欢迎大家相互交流,共同提高技术。


JSON (JavaScript Object Notation)是一种数据交换格式,是以JavaScript为基础的数据表示语言,是在以下两种数据结构的基础上来定义基本的数据描述格式的:1) 含有名称/值对的集合;2) 一个有序的列表。对于 JSON,其部分数据结构的BNF 定义如下所示。形如{“name”:”ldxian”,”age”:23}就表示一个JSON 对象,其有两个属性,值分别为ldxian和23。其余的如数字、注释等跟其他编程语言差不多。下面就开始看看facebookthrift是怎样实现json协议的。

首先看看Thrift的数据类型和JSon数据类型的对应关系:

(1) Thrift的所有整数类型JSon都作为数字表示;

(2) Thriftdouble类型也作为JSon的数字表示,特殊的值用字符串表示,如下:

a. NaN表示不是数字值;

b. Infinity表示正无穷大;

c. –Infinity表示负无穷大。

(3) Thrift的字符串表示为JSon的字符串并加上一些转义字符;

(4) Thrift的二进制值并编码为base64编码然后作为JSon的字符串;

(5) Thrift的结构体表示为JSon的对象,字段ID作为key,字段值用一个单一的键值对的JSon对象表示。键是一个简短的字符串代表特定的类型,接着就是值。有效的类型标识是:"tf"代表 bool,"i8" 表示 byte,"i16"表示16位整数,"i32"表示32位整数,"i64"表示64位整数,"dbl"表示双精度浮点型,"str" 表示字符串(包括二进制),"rec"表示结构体 ("records"),"map"表示 map,"lst" 表示 list, "set" 表示set。

(6) Thriftlistssets被表示为JSonarray(数组),其中数组的第一个元素表示Thrift元素的数据类型,数组第二值表示后面Thrift元素的个数。接着后面就是所有的元素。

(7) Thriftmaps