javascript中eval函数和JSON.parse函数处理json中的\斜杠转义字符

参考帖子

参考文章(从一个 JSON.parse 错误深入研究 JavaScript 的转义字符)但是该篇文章好像也没讲的太清楚

直接po图和代码

jsonData2.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>javascript中eval()函数和JSON.parse()函数处理json中的\斜杠转义字符</title>
<script type="text/javascript">
//---------------------------
//参考网页https://www.cnblogs.com/jun-tao/p/3707663.html
//参考网页https://ask.csdn.net/questions/806861

/*
大家可以试一下写1个\斜杠,或者写2个\斜杠,或者写3个\斜杠,或者写,4个\斜杠,再分
别使用JSON.parse()函数解析一下,效果有很大的不同,有的会报错,有的能正确解析
*/
console.log('------------1个\斜杠-----------------');
var jsonStr68 = '{"sex":"男","info":"我\是超人haha"}';// 1个\斜杠
console.log(jsonStr68);//结果为{"sex":"男","info":"我是超人haha"}
var jsonObj90 = eval("(" + jsonStr68 + ")");//正确
var jsonObj77 = JSON.parse(jsonStr68);//正确
//结果为Object { sex: "男", info: "我是超人haha" } 男 我是超人haha
console.log(jsonObj77,jsonObj77.sex, jsonObj77.info);

console.log('------------2个\斜杠-----------------');
var jsonStr27 = '{"sex":"男","info":"我\\是超人tom"}'; // 2个\斜杠
console.log(jsonStr27);//结果为{"sex":"男","info":"我\是超人tom"}
var jsonObj75 = eval("(" + jsonStr27 + ")"); //正确
//结果为Object { sex: "男", info: "我是超人tom" }男 我是超人tom
console.log(jsonObj75,jsonObj75.sex, jsonObj75.info);

// var jsonObj76 = JSON.parse(jsonStr27);//报错
//console.log(jsonObj76.sex, jsonObj76.info);


var testJsonStr = '{"sex":"男","info":"我\\"是超人tom2"}';// 2个\斜杠
console.log(testJsonStr);//结果为{"sex":"男","info":"我\"是超人tom2"}
var myObj77 = JSON.parse(testJsonStr);
//结果为Object { sex: "男", info: "我\"是超人tom2" }男 我"是超人tom2
console.log(myObj77, myObj77.sex, myObj77.info);
// testJsonStr = '{"sex":"男","info":"我\\'是超人jack3"}'; //这句代码,连语法都通不过



console.log('------------3个\斜杠-----------------');
var jsonStr69 = '{"sex":"男","info":"我\\\是超人jack"}';// 3个\斜杠
console.log(jsonStr69);//结果为{"sex":"男","info":"我\是超人jack"}
var jsonObj91 = eval("(" + jsonStr69 + ")");//正确
console.log(jsonObj91);//结果为Object { sex: "男", info: "我是超人jack" }
console.log(jsonObj91.sex, jsonObj91.info);//结果为男 我是超人jack
// var jsonObj78 = JSON.parse(jsonStr69);//报错
//console.log(jsonObj78.sex, jsonObj78.info);


var str = '{"sex":"男","info":"我\\\"是超人jack2"}';// 3个\斜杠
console.log(str);//结果为{"sex":"男","info":"我\"是超人jack2"}
var myObj = JSON.parse(str);
//结果为Object { sex: "男", info: "我\"是超人jack2" }男 我"是超人jack2
console.log(myObj, myObj.sex, myObj.info);
str = '{"sex":"男","info":"我\\\'是超人jack3"}';// 3个\斜杠
console.log(str);//结果为{"sex":"男","info":"我\'是超人jack3"}
// myObj = JSON.parse(str);//报错
// console.log(myObj.sex, myObj.info);



console.log('------------4个\斜杠-----------------');
var jsonStr70 = '{"sex":"男","info":"我\\\\是超人lucy"}';// 4个\斜杠
console.log(jsonStr70);//结果为{"sex":"男","info":"我\\是超人lucy"}
var jsonObj92 = eval("(" + jsonStr70 + ")");//正确
console.log(jsonObj92);//结果为Object { sex: "男", info: "我\\是超人lucy" }
var jsonObj79 = JSON.parse(jsonStr70);//正确
console.log(jsonObj79);//结果为Object { sex: "男", info: "我\\是超人lucy" }
console.log(jsonObj79.sex, jsonObj79.info);//结果为男 我\是超人lucy

console.log('------------5个\斜杠-----------------');
var jsonString = '{"sex":"男","info":"我\\\\\是超人superman"}';// 5个\斜杠
console.log(jsonString);//结果为{"sex":"男","info":"我\\是超人superman"}
var jsonObj_ = eval("(" + jsonString + ")");//正确
console.log(jsonObj_);//结果为Object { sex: "男", info: "我\\是超人superman" }
var jsonObj_2 = JSON.parse(jsonString);//正确
console.log(jsonObj_2);//结果为Object { sex: "男", info: "我\\是超人superman" }
结果为Object { sex: "男", info: "我\\是超人superman" }男 我\是超人superman
console.log(jsonObj_2, jsonObj_2.sex, jsonObj_2.info);

</script>
</head>
<body style="background-color: #CCE8CF;">
<h2>javascript中eval()函数和JSON.parse()函数处理json中的\斜杠转义字符</h2>
</body>
</html>

jsonData3.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>javascript中eval()函数和JSON.parse()函数处理json中的\斜杠转义字符</title>
<script type="text/javascript">
//参考网页https://www.cnblogs.com/jun-tao/p/3707663.html
//参考网页https://ask.csdn.net/questions/806861
console.log('***************************************');
// var text = "江西省赣州市于都县\";//这句代码,连语法都通不过
var text = "江西省赣州市于都县\\";
console.log(text);//结果为江西省赣州市于都县\
// text = "江西省赣州市于都县"";//这句代码,连语法都通不过
text = "江西省赣州市于都县\"";
console.log(text);//结果为江西省赣州市于都县"
// text = "江西省赣州市于都县\\\";//这句代码,连语法都通不过
text = "江西省赣州市于都县\\\\";
console.log(text);//结果为江西省赣州市于都县\\
console.log('\6\66');//结果为�6
console.log('\66\6');//结果为6�
console.log("\666");//结果为66
console.log("\999");//结果为999 (\斜杠不会打印出来)
console.log("\9\9\9");//结果为999 (\斜杠不会打印出来)
console.log("\8\88");//结果为888 (\斜杠不会打印出来)
console.log("\江西省\赣州市\于都县"); //结果为江西省赣州市于都县 (\斜杠不会打印出来)

</script>
</head>
<body style="background-color: #CCE8CF;">
<h2>javascript中eval()函数和JSON.parse()函数处理json中的\斜杠转义字符</h2>
</body>
</html>

jsonData4.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>javascript中eval()函数和JSON.parse()函数处理json中的\斜杠转义字符</title>
<script type="text/javascript">
//参考网页https://www.cnblogs.com/jun-tao/p/3707663.html
//参考网页https://ask.csdn.net/questions/806861
//---------------------------------
console.log('***************************************');

/*
一般来说在JSON.parse的参数中包含转义字符的时候会遇到两次转义的问题,其
实第一次是字符串本身的转义,第二次是将真正转为js对象的转义
*/
  
/*
将字符串'{"a":"b","b":"\\"}'传递给JSON.parse,首先解析器提取单引号括起来的字
符串时认为第一个\转义第二个\ 第三个\转义第四个\,
也就是说实际可输出字符串是{"a":"b","b":"\"}(可通过console.log('{"a":"b","b":"\\"}')验证)
*/
console.log('{"a":"b","b":"\\"}'); //结果为{"a":"b","b":"\"}

console.log(JSON.parse('{"a":"b","b":"\"}')); //结果为Object { a: "b", b: "" }
// console.log(JSON.parse('{"a":"b","b":"\\"}')); //报错
// console.log(JSON.parse('{"a":"b","b":"\\\"}')); //报错
console.log(JSON.parse('{"a":"b","b":"\\\\"}')); //结果为Object { a: "b", b: "\\" }
var obj = JSON.parse('{"a":"b","b":"\\\\"}');
console.log(obj); //结果为Object { a: "b", b: "\\" }
console.log(obj.a, obj.b); //结果为b \

// var jsonObject = { "a": "b", "b": "\" }; //这句代码,连语法都通不过

var aaa = '{"age":"16","hobby":"爬山"}';
var aaa1 = eval('(' + aaa + ')');
console.log(aaa1);//结果为Object { age: "16", hobby: "爬山" }
var aaa2 = JSON.parse(aaa);
console.log(aaa2);//结果为Object { age: "16", hobby: "爬山" }

</script>
</head>
<body style="background-color: #CCE8CF;">
<h2>javascript中eval()函数和JSON.parse()函数处理json中的\斜杠转义字符</h2>
</body>
</html>

jsonData5.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>javascript中eval()函数和JSON.parse()函数处理json中的\斜杠转义字符</title>
<script type="text/javascript">
//参考网页https://www.cnblogs.com/jun-tao/p/3707663.html
//参考网页https://ask.csdn.net/questions/806861
//---------------------------------
console.log('***************************************');
var jsonStr28 = {"sex":"男","info":"我\\是咸蛋超人"};
console.log(jsonStr28);//结果为Object { sex: "男", info: "我\\是咸蛋超人" }
console.log(jsonStr28.sex, jsonStr28.info);//结果为男 我\是咸蛋超人

var jsonStr29 = {"sex":"男","info":"我\是孙悟空1"};
console.log(jsonStr29);//结果为Object { sex: "男", info: "我是孙悟空1" }
console.log(jsonStr29.sex, jsonStr29.info);//结果为男 我是孙悟空1

jsonStr29 = {"sex":"男","info":"我\'是孙悟空2"};
console.log(jsonStr29);//结果为Object { sex: "男", info: "我'是孙悟空2" }
console.log(jsonStr29.sex, jsonStr29.info);//结果为男 我'是孙悟空2

var jsonStr30 = {"sex":"男","info":"我\\\是康熙"};
console.log(jsonStr30);//结果为Object { sex: "男", info: "我\\是康熙" }
console.log(jsonStr30.sex, jsonStr30.info);//结果为男 我\是康熙

var jsonStr31 = {"sex":"男","info":"我\\\\是小宝"};
console.log(jsonStr31);//结果为Object { sex: "男", info: "我\\\\是小宝" }
console.log(jsonStr31.sex, jsonStr31.info);//结果为男 我\\是小宝

</script>
</head>
<body style="background-color: #CCE8CF;">
<h2>javascript中eval()函数和JSON.parse()函数处理json中的\斜杠转义字符</h2>
</body>
</html>

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值