序列化和反序列化

153 阅读2分钟

1、序列化和反序列化

因为结构体不便于传输,一般需要将结构体转化为一个“长的字符串”,然后再送入网络,这个过程我们称为序列化。

相对应的,接收端那边在接收的时候,需要将这个长字符串转化为对方能够识别的形式,如结构体,这个过程我们称为反序列化。

为什么需要序列化和反序列化(序列化和反序列化的优点)

1、方便传输

介于结构体对齐原则,结构化的数据不便于用于网络传输

或许你觉得,既然整个结构体传输不行,那就将结构体的每个成员以字符串的形式一个一个传过去,这么做理论上可行,但是一台主机可能会收到多个主机发来的数据,这个时候,就很难区分是哪个主机发的数据。

2、实现应用层显示和网络传输的解耦

假设发布端发送一个字符串 "10 + 20",让接收端去计算,如果不经过序列化,而是直接发送的话,传递确实很方便,但是站在接收端的角度,解析的成本可太高了。

实现序列化和反序列化

序列化:js中的object转化为字符串

1.使用toJSONString

let last=obj.toJSONString(); //将JSON对象转化为JSON字符 

2.使用stringify

let last=JSON.stringify(obj); //将JSON对象转化为JSON字符

3.json转字符串函数

 var json = {a:1,b:2,c:3};
  var arr = [];
  for ( name in json) {
    arr.push(name+':'+json[name]);
  }
  var str = arr.join(',');
  alert(str);

反序列化:json字符串转化为object

1.eval

var obj=eval("("+data+")");  

2.使用parseJSON

var obj = data.parseJSON(); //由JSON字符串转换为JSON对象  

3.使用parse

var obj = JSON.parse(data); //由JSON字符串转换为JSON对象 

4.使用封装函数

​
function convertCartStrToObj(cartStr){        
         var obj ={};
        //将字符串name:swk,key:123456,tel:15871339963 按“,”拆分成数组["name:swk", "key:123456", "tel:15871339963"]
         var arrVal = cartStr.split(",");  
         for ( var i = 0; i < arrVal.length ;i++){
                  data = arrVal[i].split(":"); // 在将每一项拆分 例如arrVal[0]时 data =["name", "swk"]
                  console.log(data)
                  obj[data[0]] = data[1]; //给对象添加属性
         }
        return obj;
}