##Protocol Buffers和JSON
google的Protocol Buffers能将结构化的数据序列化,广泛地运用在远程过程调用(RPC)系统中。很多互联网公司在自己的框架中使用PB来序列化数据,可以用来在不同的语言之间互相调用。比如用Java做WEB前端的CGI,用C++做AO接口,WEB前端调用CGI,而CGI调用业务逻辑服务器的AO服务。
JSON例子
{
"person": ["name":"John Doe", "email":"jdoe@"],
"job": ["level":"IT", "salary":"10000+"]
}
Protocol buffers例子
page {
page_id: 111111111
page_title: "title"
merchant_logo: "http://imgpg"
merchant_name: "fdasf"
card_info { card_id: "pDPoJjzWW" title: "adfafasf" sub_title: "aaaaa" }
card_info { card_id: "pDPoJj5-h4" title: "dasffdaf" sub_title: "1111111" }
}
err_code: 0
err_msg: ""
从上面可以看出,PB和JSON基本一致,PB的输出可以直接转换为JSON传输到网络中。这样一个C++框架可以解析Java发过来的Request并返回Response,这就完成了Java对C++服务的远程调用。
JSON与JS
JSON其实是JS的一个子集,把任何JavaScript对象变成JSON,就是把这个对象序列化成一个JSON格式的字符串,这样就可以通过网络传递给其他计算机。
如果我们收到一个JSON格式的字符串,只需要把它反序列化成一个JavaScript对象,就可以在JavaScript中直接使用这个对象了。
对如下对象进行序列化
var log = console.log.bind(console);
var huangyi = {
name: 'huangyi',
age: 24,
gender: true,
hight: 1.79,
grade: null,
'school': 'lzu middle school',
skills: ['C++', 'Python', 'Javascript']
};
log(JSON.stringify(huangyi));
JSON输出如下
{
"name": "huangyi",
"age": 24,
"gender": true,
"hight": 1.79,
"grade": null,
"school": "lzu middle school",
"skills": [
"C++",
"Python",
"Javascript"
]
}
这样就完成了WEB(JavaScript)到CGI(JAVA)再到业务逻辑服务器(C++)的通信。
##参考