Json parse()没有逃脱\"在javascript中

时间:2014-11-19 04:36:48

标签: javascript json jackson

我有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 \"总是",所以我无法取代它;

我想念的是什么指针?

2 个答案:

答案 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解析已经在服务器端处理了。