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 可选. 一个转换结果的函数. 将为对象的每个成员调用此函数. 如果成员包含嵌套对象,则先于父对象转换嵌套对象. 对于每个成员,会 ... 
随机推荐
- VisualStudio 使用 FastTunnel 辅助搭建远程调试环境
			有时候需要远程调试一些用户问题,期望能使用本机的 Visual Studio 开发环境,调试远程的用户的设备上的应用.这时会遇到的一个问题是如何让本机的 Visual Studio 可以连接上远程的用 ... 
- WPF 切换主题使用 luna 复古版本
			本文告诉大家如何在 WPF 里面使用 luna 等复古主题 今天在 lsj 说他准备优化 WPF 的程序集时,准备删除 luna 等程序集时,找到了一段有趣的注释,发现在 WPF 里面可以通过一些有趣 ... 
- SQL server 查看脚本
			原文出处:http://blog.csdn.net/xiaochunyong/article/details/7455051 --Siuon --查看存储过程源码 create procedure m ... 
- pod QoS等级(A)
			一.了解Pod Qos等级 一个节点不一定能提供所有pod所指定的资源limits之和那么多的资源量. 假设有两个pod,pod A使用了节点内存的 90%,pod B突然需要比之前更多的内存,这时节 ... 
- 自动化测试数据生成:Asp.Net Core单元测试利器AutoFixture详解
			引言 在我们之前的文章中介绍过使用Bogus生成模拟测试数据,今天来讲解一下功能更加强大自动生成测试数据的工具的库"AutoFixture". 什么是AutoFixture? Au ... 
- 题解:CF1956A Nene's Game
			这道题其实挺有意思,多测里面还套了个多测. 思路就是用向量模拟删除过程,具体请看代码里的注释. #include <bits/stdc++.h> using namespace std; ... 
- pageOffice控件实现在线编辑Word 只能加批注的功能
			OA办公中,业务需要编辑打开word文档后 文档的正文不能改变,只能对文档进行加批注的操作 怎么实现编辑打开word文档后 文档的正文不能改变,只能对文档进行加批注的操作呢? # 1.实现方法 通过p ... 
- 高效运维_AIRIOT智慧电力运维解决方案
			可再生能源的引入带来了能源生产的去中心化和分散化趋势,同时也带来了能源输出的波动性和不确定性.电力运维因此需要更加灵活.智能的解决方案,以适应可再生能源的集成,确保电力系统的稳定运行,传统的电力运维管 ... 
- AIRIOT助力城市管廊工程,智慧物联守护城市生命线
			 随着科技的不断革新,人工智能.大数据.物联网等新一代技术驱动的智慧城市快速发展,众多领域和行业的参随着科技的不断革新,人工智能.大数据.物联网等新一代技术驱动的智慧城市快速发展,众多领域和行业的参 ... 
- 七年之痒!一个 PHP 程序员职业生涯的自述
			大家好,我是码农先森. 今年刚好是我毕业的第七个年头,在婚姻感情当中都有一种「七年之痒」的说法,这次我把这个词「七年之痒」用一次在我的职业生涯复盘上.七年前我从告别校园,踏入互联网编程行业,七年后我依 ... 
