JS的JSON.parse问题
这个问题,已经有非常多人说过,而且由来已久。
大家都提供了不少的解决方法,但是都不够彻底。
一)现在是什么情况
1.使用SpringMvc+ModelAndView+jsp传递值
由于业务需要,通过mv向jsp传递值p,之后jsp解析p,其中p是JSON字符串。
这个串在java中没有问题,但是在jsp中使用JSON.parse的时候遇到了问题,这个问题就是经典的转义字符问题
2.在html/jsp中直接定义字面量json字符串的时候,parse问题,情况同第1种
二)如何解决
1.如果是规避,那么有许多种方法,例如放弃mv传值方式,或者java后台处理好,或者避免使用字面量定义json字符串。不过本文不阐释这个。
2.在使用字面量之前,先转换。
本文通过例子来看看第2种的解决方案
三)解决例子
运行结果如下图:

这个例子说明了3个问题:
a)使用ajax接受的JSON对象,不存在解析问题
b)如果使用简单的对象定义方式,那么不存在异常字符问题
c)使用mv传递(本例没有示范)和字面量定义json字符串的时候,可以使用替换的方式解决parse问题
例子中有意义的代码如下:
function replaceEscapeChar(sSource) {
const escapeCharArr = [{
key: '\"\"',
value: '\\"\"'
}, {
key: '\t',
value: '\\t'
}, {
key: '\n',
value: '\\n'
}, {
key: '\r',
value: '\\r'
}, {
key: '\t',
value: '\\t'
}];
let tmpStr = sSource;
for (let i = 0, len = escapeCharArr.length; i < len; i++) {
let arr = tmpStr.split(escapeCharArr[i].key);
tmpStr = arr.join(escapeCharArr[i].value);
}
return tmpStr;
}
不过我们希望,以后的浏览器升级之后,程序员不用那么辛苦了。
至少不要幸苦大家,而只是小小麻烦下浏览器厂商!
JS的JSON.parse问题的更多相关文章
- JS中JSON.parse和eval的异同
1.相同点 JSON.parse和eval函数都可将一段json字符串转换为json对象,如: var json = '{"intro":[{"name":&q ...
- JS之JSON.parse和JSON.stringify
这两个函数有兼容性问题, 会报错JSON"未定义 解决方案, 引入json2.js,可以解决浏览器的兼容性 https://link.jianshu.com/?t=https://githu ...
- js - SyntaxError: JSON.parse: unexpected character at line 1 column 2 of the JSON data jquery-1.9.1.min.js:3:4315
FF中时不时报这个错, 就近段做项目来看, 一般是我通过 jquery获取form中的参数(或直接获取参数,并通过ajax进行异步请求的时候,如果有错,就抱该错误! 而对应的, 如果在 Google ...
- js之json
关于json不了解的,请点击:http://www.json.org/json-zh.html json对象的属性必须要用双引号,值为字符串类型也只能使用双引号,例:{"name" ...
- 你不知道的JSON.stringify和JSON.parse
json是JavaScript 对象表示法(JavaScript Object Notation),是一种简单的数据格式,类似于XML,其格式为名称/值对,数据用逗号隔开,名称必须用双引号括起来.例如 ...
- JSON.stringify,JSON.parse方法
var obj={name:'zhangsan',age:'18'};/** js对象--->JSON字符串* JSON.stringify(js对象) --转化为--> JSON字符串* ...
- arguments.callee 调用函数自身用法----JSON.parse()和JSON.stringify()前端js数据转换json格式
arguments.callee 调用函数自身用法 arguments.callee 在哪一个函数中运行,它就代表哪个函数. 一般用在匿名函数中. 在匿名函数中有时会需要自己调用自己,但是由于是匿名函 ...
- Js中JSON.stringify()与JSON.parse()与eval()详解及使用案例
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式.因为采用独立于语言的文本格式,也使用了类似于C语言家族的习惯,拥有了这些特性使使JSON称为理想的数据交换语 ...
- js数组使用JSON.stringify()和toString()的区别,JSON.parse
JSON.stringify()中的<br><br>var arr = [1,2,3,4]; console.log(arr.toString()); // 1,2,3,4 a ...
- JSON.parse 的用法,在js中用的。也是反序列化用法。
参数 text 必需. 一个有效的 JSON 字符串. reviver 可选. 一个转换结果的函数. 将为对象的每个成员调用此函数. 如果成员包含嵌套对象,则先于父对象转换嵌套对象. 对于每个成员,会 ...
随机推荐
- [php-src] Php扩展开发的琐碎注意点、细节
内容均以php-5.6.14为例. 函数中接收的字符串参数长度不包含结尾的0,在 zend_update_property 中,长度的参数是 int len,一般都使用 ZEND_STRL(NAME) ...
- Github Copilot绑定Jetbrains IDE无效的解决方案
在Github中进行教育认证后不会自动开通Copilot功能,因此,在进行了Github教育认证之后,在使用之前要进入Github Copilot官网开通Coplilot,如果忽略了这一点,绑定Jet ...
- go http请求如果参数中带有"等特殊字符,参数传输可能会出现问题
编码完整的URL url.QueryEscape(urlStr) 编码完整的URL 如果我们要对完整的 URL 进行编码呢? 就是PHP中 urlencode() 函数的功能. 在 GO 语言下可以直 ...
- 05. gem使用手册
https://www.jianshu.com/p/ced2793bfde4?utm_campaign=maleskine&utm_content=note&utm_medium=se ...
- 用Python画一个冰墩墩!
北京2022年冬奥会的召开,吉祥物冰墩墩着实火了,真的是一墩难求,为了实现冰墩墩的自由,经过资料搜集及参考冰墩墩网上的开源代码(https://github.com/HelloCoder-HaC/bi ...
- 【Azure Developer】如何通过Azure Portal快速获取到对应操作的API并转换为Python代码
问题描述 对于Azure资源进行配置操作,门户上可以正常操作.但是想通过Python代码实现,这样可以批量处理.那么在没有SDK的情况下,是否有快速办法呢? 问题解答 当然可以,Azure Porta ...
- MySQL的索引优化
一.索引的使用场景 1.全值匹配 通过主键索引查询 mysql> explain select * from t_goods where id = 1 \G; ***************** ...
- 用Yacht管理docker容器
今天是六一儿童节,祝大小朋友们节日快乐! 从今天开始起,防范区的上海市民可以自由出入小区了.始于愚人节,终于儿童节,整整两个月时间,终于迎来了期盼已久的自由和正常. 周一上午的的核酸可能是我们最后一次 ...
- 最好的在线PDF转换工具服务
工作中有时候会碰到需要转换PDF文件的情况,现在网上就要很多免费的在线工具,可以进行PDF文件的转换,下面就来介绍一些可以直接在浏览器中将文档.电子表格.和图片转换为PDF或者互相转换的服务工具. ...
- 实战SQL优化(以MySQL深分页为例)
1 准备表结构 CREATE TABLE `student` ( `id` int NOT NULL AUTO_INCREMENT, `user_no` varchar(50) CHARACTER S ...