Json parse() 在 JavaScript 中不会转义 ”

Json parse() does not escape " in javascript

本文关键字:转义 JavaScript parse Json      更新时间:2023-09-26

我有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 刺痛时,它用反斜杠 () 转义,这就是为什么我们看到"''"(来自查看源代码)

    var paramMap = JSON.parse('{"Filepath":"/home/status.txt","Search expression":"'""}');

但是上面的一行说,"未捕获的语法错误:意外的字符串"。

我看过几篇帖子,他们说它需要两个解析,一个用于javascript,一个用于JSON。我试图将 ''" 替换为 ''''" ;但是在 JavaScript 中 ''" 总是 ",所以我无法替换它;

有什么指示我在这里错过了什么吗?

问题是你没有将${testTypeMap}中的字符串编码为 JavaScript 文字。 我不确定如何在您的框架中专门执行此操作,但它类似于对字符串进行 HTML 编码,但适用于 JavaScript。

然而!

在您的特定示例中,您可以避免使用JSON.parse因为 JSON 已经采用 JavaScript 可以使用的格式。

var paramMap = ${testTypeMap};
showTestType('File content', 'LINUX', paramMap);

发送到浏览器的结果源如下所示:

var paramMap = {"Filepath":"/home/status.txt","Search expression":"'""};
实际上我不知道

如何在 javascript 中将 ''" 替换为 '''',因为 ''" 总是表示为 " (只有一个没有反斜杠的引号)。

因此,在使用杰克逊的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 解析已经在服务器端得到了处理。