js实现php的json_encode

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>加解密时仅需要秘钥</title>
</head>
<body>
    <script type="text/javascript">
const JSON_HEX_QUOT = 8;
const JSON_HEX_TAG = 1;
const JSON_HEX_AMP = 2;
const JSON_HEX_APOS = 4;
const JSON_NUMERIC_CHECK = 32;
const JSON_UNESCAPED_SLASHES = 64;
const JSON_UNESCAPED_UNICODE = 256;
const JSON_FORCE_OBJECT = 16;
function json_encode(val,options = 0){
	var   gettype=Object.prototype.toString;
	switch( gettype.call(val) ){
		case '[object String]':
			return json_escape_string(val,options);
		break;
		case '[object Number]':
			if(val % 1 === 0){
				return val;
			}else{
				return isFinite(val)?val:0;
			}
		break;
		case '[object Boolean]':
			return val?true:false;
		break;
		case '[object Undefined]':
			return null;
		break;
		case '[object Null]':
			return null;
		break;
		case '[object Object]':
			return json_encode_array(val,options);
		break;
		case '[object Array]':
			return json_encode_array(val,options);
		break;
		case '[object Function]':
			return null;
		break;
		default:
			return null;
		break;
	}
	
}
 
function json_escape_string(val,options){
	var pos = 0;
	var len = val.length;
	if(len == 0){
		return '""';
	}
	if(options & JSON_NUMERIC_CHECK){
        	if (!isNaN(parseInt(val))) {
           		if(val % 1 === 0){
				return val;
			}else{
				return isFinite(val)?val:0;
			}
        	}
	}
	if(len == null){
		return null;
	}else if(len == 0){
		return '""';
	}
	var result = '"';
	while(pos < len){
		us = val.charAt(pos);
		switch(us){
			case '"':
				if(options & JSON_HEX_QUOT){
					result += "\\u0022";
				}else{
					result += "\\\"";
				}
				break;
			case '\\':  
				result += "\\\\";
				break;
			case '/':
				if (options & JSON_UNESCAPED_SLASHES ) {  
					result += us;
				} else {  
					result += "\\/";
				}
				break; 
			case '\b':  
				result += "\\b";
				break;  
 
			case '\f':  
				result += "\\f";
				break;  
 
			case '\n':  
				result += "\\n";
				break;  
 
			case '\r':  
				result += "\\r";
				break;  
 
			case '\t':  
				result += "\\t";
				break;  
 
			case '<':  
				if (options & JSON_HEX_TAG) {  
					result += "\\u003C";
				} else {  
					result += '<';
				}  
				break;  
 
			case '>':  
				if (options & JSON_HEX_TAG) {  
					result += "\\u003E";
				} else {  
					result += '>';
				}  
				break;  
 
			case '&':  
				if (options & JSON_HEX_AMP) {  
					result += "\\u0026";
				} else {  
					result += '&';
				}  
				break;  
 
			case '\'':  
				if (options & JSON_HEX_APOS) {  
					result += "\\u0027";
				} else {  
					result += '\'';
				}  
				break;  
 
			default:
				if ((us >= ' ' && (us & 127) == us) || IsDigit(us) || IsAlpha(us) || (options & JSON_UNESCAPED_UNICODE)) {  
					result += us;
				}else{
					result += "\\u"+parseInt(us.charCodeAt(0),10).toString(16);
				}
				break;
		}
		pos++;
	}
	result += '"';
	return result;
 
}
 
function IsDigit(cCheck) { return (('0'<=cCheck) && (cCheck<='9')); }
 
function IsAlpha(cCheck) { return ((('a'<=cCheck) && (cCheck<='z')) || (('A'<=cCheck) && (cCheck<='Z'))) }
 
function is_index_array(val,options){
	if(options & JSON_FORCE_OBJECT){
		return false;
	}
	var index = 0;
	for(var item in val){ 
		if(item == index){
			index++;
		}else{
			return false;
		}
	}
	return true;
}
 
function json_encode_array(val,options){
	if(!is_index_array(val,options)){
		var result = '{';
	}else{
		var result = '[';
	}
	if(!is_index_array(val,options)){
		for(var item in val){ 
			result += json_encode(item,options)+':'+json_encode(val[item],options);
			result += ',';
		}
	}else{
		for(var item in val){
			result += json_encode(val[item]);
			result += ',';
		}
	}
	if(result.length > 1){
		result = result.substring(0,result.length-1)
	}
	if(!is_index_array(val,options)){
		result += '}';
	}else{
		result += ']';
	}
	return result;
}
    var defs = '[contractorList: \'[{"email":"zhangshan@qq.com","name":"Johnere","agentName":"456456","linkPhone":"456456","isReal":0,"category":2}]\', createType: 0,endDate:\'2019-05-24\',originFile:"/20190523/89c2b6abdaacdc5ed268a9d7a2d633b9.doc",signType:0,subject:\'12345\']';
	console.log(json_encode(defs))	
	console.log(JSON.stringify( defs ))
    </script>
</body>
</html>

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值