json
element
value
object
array
string
number
"true"
"false"
"null"
HESSIAN 类型系统
#starting production
top ::= value
#main production
value ::= null
::= binary
::= boolean
::= class-def value
::= date
::= double
::= int
::= list
::= long
::= map
::= object
::= ref
::= string
目录
概要
sofa-hessian-go是 hessian 2.0/1.0 serialization protocol 的 Golang 实现,包括 1.0 协议以及 2.0 协议的java3.x和java4.x版本,同时还提供了 JSON 到 hessian 类型系统互相转换的设计。在此非常感谢 node-modules/hessian.js 提供的 golden files(测试数据), 两者底层复用了同样的测试数据集。
类型系统
hessian 的类型系统由 8 种基础类型和 3 种复合类型,以及 3 种 引用类型组成。
基础类型
复合类型
引用类型
编码规范
sofa-hessian-go 遵循以下编码规范,将 go 的类型转化为 hessian 的类型。
解码规范
sofa-hessian-go 遵循以下解码规范,将 hessian 的类型转化为 go 的类型。
int32 => int32
int64 => int64
bool => bool
string => string
null => nil
date => time.Time
map
list
object =>
json 转换
JSON 的类型系统比 HESSIAN 的类型系统更精简,从理论上是可以在一定人为约束条件下做到 JSON 和 HESSIAN 的类型转换。
JSON 到 HESSIAN 的类型转换
给定一个 HESSIAN 类型总是存在一种 JSON 类型可以等价描述出来。但是在实际实现中只有一种情况例外,即 HESSIAN 可以以较小的代价描述循环引用的数据结构,JSON 虽然可以描述,但通常导致的结果就是无限递归导致爆栈。 JSON 天然无法处理循环引用的数据结构,不过 sofa-hessian-go 在实际的实现中以较小的代价跟踪循环引用的问题,以不完整的数据结构代替了爆栈。
基础类型
NULL 类型
给定一个 hessian null 类型总是可以用 json null 类型描述即
json.null => hessian.boolbool 类型
给定一个 hessian bool 类型总是可以用 json bool 类型描述即
json.bool => hessian.boolint 类型
给定一个 hessian int 类型无法直接用 json number 类型描述,但是我们可以通过 json object 包装来表示即
long 类型
给定一个 hessian long 类型总是可以用 json number 类型描述即
json.number => hessian.longdouble 类型
给定一个 hessian double 类型总是可以用 json object 类型描述即
binary 类型
给定一个 hessian binary 类型总是可以用 json object 类型描述即
date 类型
给定一个 hessian date 类型总是可以用 json object 类型描述即
复合类型
map 类型
给定一个 hessian map 类型总是可以用 json object 类型描述即
json.object => hessian.maplist 类型
给定一个 hessian map 类型总是可以用 json array 类型描述即
json.array => hessian.listobject 类型
给定一个 hessian object 类型总是可以用 json object 类型描述即
HESSIAN 到 JSON 的类型转换
给定一个 JSON 类型总是存在一种 HESSIAN 类型可以等价描述出来.
基础类型
number
给定一个 json number 类型总是可以用 hessian int/long/double 类型描述即
hessian.int|long/double => json.numberstring
给定一个 json string 类型总是可以用 hessian string 类型描述即
hessian.string => json.stringbool
给定一个 json bool 类型总是可以用 hessian bool 类型描述即
hessian.bool => json.boolnull
给定一个 json null 类型总是可以用 hessian null 类型描述即
hessian.null => json.null复合类型
object
给定一个 json object 类型总是可以用 hessian map 类型描述即
hessian.map => json.objectarray
给定一个 json array 类型总是可以用 hessian array 类型描述即
hessian.array => json.array附录
JSON 类型系统
HESSIAN 类型系统
API
encode
查看 examples/sofahessian_examples_test.go
decode
查看 examples/sofahessian_examples_test.go
json
查看 examples/sofahessian_examples_test.go
CLI
install
make hessian
decode
fromjson
性能测试
TODO