网络间json字符串传递的技巧

最近做到一个网络间传递数据的问题,我选择的是用json字符串进行数据传递,于是就各种拼json字符串,如下例:

发送数据:

function transferData(shape){	
	 var shapeJsonStr = '{'+
				'"name":"'+shape.name+'",'+
	 			'"fillStyle":"'+shape.option.fillStyle+'",'+
	 			'"lineWidth":'+shape.option.lineWidth+','+
	 			'"opacity":'+shape.option.opacity+','+
	 			'"strokeStyle":"'+shape.option.strokeStyle+'",';
	 if(shape.name=="Pen"){
		 //钢笔 -- 添加list
		 shapeJsonStr += '"list":'+JSON.stringify(shape.option.list);
	 }
	 else if(shape.name=="CircleStroke"){		
		 //圆形 -- 添加x、y、radius		 
		 shapeJsonStr += '"x":'+shape.option.x+',';
		 shapeJsonStr += '"y":'+shape.option.y+',';
		 shapeJsonStr += '"radius":'+shape.option.radius;
	 }
	 else{ //“矩形” 或 “椭圆”		 
		 if(shape.name=="RectStroke"){
			 //矩形 -- 添加left、top、width、height
			 shapeJsonStr += '"left":'+shape.option.left+',';
			 shapeJsonStr += '"top":'+shape.option.top+',';			 
		 }
		 else{
			 //椭圆 -- 添加x、y、width、height
			 shapeJsonStr += '"x":'+shape.option.x+',';
			 shapeJsonStr += '"y":'+shape.option.y+',';
		 }
		 shapeJsonStr += '"width":'+shape.option.width+',';
		 shapeJsonStr += '"height":'+shape.option.height;
	 }
	shapeJsonStr += '}';
	 
}

接收数据:

function paintReceive(shapeJsonStr){
	var _shape = JSON.parse(shapeJsonStr);
	var currentCanvas = window.painter.canvas.currentCanvasContainer.getCanvas();
	
	var shape = new window.painter.model.shapeModel[_shape.name]();//_shape为:Pen、CircleStroke、RectStroke、EllipesStroke		
	shape.name = _shape.name;
	shape.option.fillStyle = _shape.fillStyle;
	shape.option.lineWidth = _shape.lineWidth;
	shape.option.opacity = _shape.opacity;
	shape.option.strokeStyle = _shape.strokeStyle;
	
	if(_shape.name=="Pen"){	//画笔Pen					
		shape.name = _shape.name;
		shape.option.list = _shape.list;
	}
	else if(_shape.name=="CircleStroke"){//圆形CircleStroke		
		shape.option.x = _shape.x;
		shape.option.y = _shape.y;
		shape.option.radius = _shape.radius;
	}
	else{//矩形(RectStroke)或椭圆(EllipesStroke)		
		 if(_shape.name=="RectStroke"){
			 //矩形 -- 添加left、top、width、height
			 shape.option.left = _shape.left;
			 shape.option.top = _shape.top;
		 }
		 else{
			 //椭圆 -- 添加x、y、width、height
			 shape.option.x = _shape.x;
			 shape.option.y = _shape.y;
		 }
		 shape.option.width = _shape.width;
		 shape.option.height = _shape.height;
	}
	currentCanvas.paint(shape);	
}


一同事看完以后,给出了一个更好的方法,如下:

function transferData(shape){
	
	var shapeJsonObj={};
	shapeJsonObj.name=shape.name;
	shapeJsonObj.fillStyle = shape.option.fillStyle;
	shapeJsonObj.lineWidth = shape.option.lineWidth;
	shapeJsonObj.opacity = shape.option.opacity;
	shapeJsonObj.strokeStyle = shape.option.strokeStyle;
	
	 if(shape.name=="Pen"){
		 //钢笔 -- 添加list
		 shapeJsonObj.list = shape.option.list;
	 }
	 else if(shape.name=="CircleStroke"){		
		 //圆形 -- 添加x、y、radius		 
		 shapeJsonObj.x = shape.option.x;
		 shapeJsonObj.y = shape.option.y;
		 shapeJsonObj.radius = shape.option.radius;
	 }
	 else{ //“矩形” 或 “椭圆”		 
		 if(shape.name=="RectStroke"){
			 shapeJsonObj.left = shape.option.left;
			 shapeJsonObj.top = shape.option.top;
		 }
		 else{
			 //椭圆 -- 添加x、y、width、height
			 shapeJsonObj.x = shape.option.x;
			 shapeJsonObj.y = shape.option.y;
		 }
		 shapeJsonObj.width = shape.option.width;
		 shapeJsonObj.height = shape.option.height;
	 }
	 var shapeJsonStr = JSON.stringify(shapeJsonObj);
}

虽然说不上是多么高深的东西吧,但也却是一个小技巧,可以省去一些麻烦。

比如:

1、一开始用自己的方法拼接字符串的时候,因为不大清楚传过去的数据各是些什么类型,所以拼接的时候,name,fileStyle,strokeStyle的值为string类型的,但我并没有给其值加上" ",结果导致在接收端接收到json字符串后,想将其转换成json对象的时候就出错了

2、 拼接json字符串的时候,因为我一开始并没有将list转换为字符串,而是直接将“对象数组”赋值给list,如:shapeJsonStr += '"list":'+shape.option.list; 结果页导致在接收端接收到json字符串后,想将其转换成json对象的时候就出错。后来才知道这里不能赋值对象数组给list,于是做了以下处理: shapeJsonStr += '"list":'+JSON.stringify(shape.option.list); 才最后运行正确。

而按照同事给出的方法后,既不用考虑数据类型,也不用考虑传递的是对象数组,直接在最后一步进行转换就行了




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值