我有java对象,使用
转换为JSON字符串 String paramMap = new ObjectMapper().writeValueAsString(custPolicy.getParamMap());
model.addAttribute("testTypeMap", paramMap );
在.jsp页面中,在加载时我尝试解析testTypeMap并返回对象;
var paramMap = JSON.parse('${testTypeMap}');
showTestType('File content', 'LINUX', paramMap);
该对象在其中一个字段中有双引号("),当它在java中转换为JSON sting时会使用反斜杠()进行转义,这就是我们看到" \&#的原因34;" (来自观察源)
var paramMap = JSON.parse('{"Filepath":"/home/status.txt","Search expression":"\""}');
但上面一行说," Uncaught SyntaxError:意外的字符串"。
我看过很少的帖子,他们说需要两个解析,一个用于javascript,一个用于JSON。我试图取代\"用\\" ;但在javascript \"总是",所以我无法取代它;
我想念的是什么指针?
答案 0 :(得分:1)
问题是您没有将${testTypeMap}
中的字符串编码为JavaScript文字。我不确定如何在你的框架中专门做到这一点,但它类似于HTML编码字符串,而是用于JavaScript。
然而!
在您的具体示例中,您可以避免使用JSON.parse
,因为JSON已经采用JavaScript可以使用的格式。
var paramMap = ${testTypeMap};
showTestType('File content', 'LINUX', paramMap);
将结果源发送到浏览器,如下所示:
var paramMap = {"Filepath":"/home/status.txt","Search expression":"\""};
答案 1 :(得分:0)
实际上我不知道如何在javascript中替换\“和\\”,因为\“总是表示为”(只有一个没有反斜杠的引用)。
所以我在使用Jackson的ObjectMapper转换为JSON字符串后,在服务器端进行了替换,如下所示:
String paramMap = new ObjectMapper().writeValueAsString(custPolicy.getParamMap());
// need to replace any \" with \\" in javascript side
paramMap = paramMap.replace("\\\"", "\\\\\"");
model.addAttribute("testTypeMap", paramMap );
现在在客户端,它显示如下:
var paramMap = JSON.parse('{"Filepath":"/home/cavirin/status.txt","Search expression":"\\""}');
这可以正常工作,因为javascript解析已经在服务器端处理了。