日期:2014-05-16 浏览次数:20339 次
我的新浪微博:http://weibo.com/freshairbrucewoo。
欢迎大家相互交流,共同提高技术。
JSON (JavaScript Object Notation)是一种数据交换格式,是以JavaScript为基础的数据表示语言,是在以下两种数据结构的基础上来定义基本的数据描述格式的:1) 含有名称/值对的集合;2) 一个有序的列表。对于 JSON,其部分数据结构的BNF 定义如下所示。形如{“name”:”ldxian”,”age”:23}就表示一个JSON 对象,其有两个属性,值分别为ldxian和23。其余的如数字、注释等跟其他编程语言差不多。下面就开始看看facebook的thrift是怎样实现json协议的。
首先看看Thrift的数据类型和JSon数据类型的对应关系:
(1) Thrift的所有整数类型JSon都作为数字表示;
(2) Thrift的double类型也作为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) Thrift的lists和sets被表示为JSon的array(数组),其中数组的第一个元素表示Thrift元素的数据类型,数组第二值表示后面Thrift元素的个数。接着后面就是所有的元素。
(7) Thrift的maps