序列化与反序列化

序列化与反序列化

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

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

** 为什么需要序列化和反序列化(序列化和反序列化的优点)**
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转字符串函

 let json = {a:1,b:2,c:3};
  let arr = [];
  for ( name in json) {
    arr.push(name+':'+json[name]);
  }
  let 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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值