说说JSON序列化

##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++)的通信。


##参考

https://developers.google.com/protocol-buffers/?hl=zh-cn



Previous     Next
tuzhi /
Published under (CC) BY-NC-SA in categories web  tagged with