jackson没有逃脱JSON中的引用

我正在尝试将json放在java中的javascript文件中,但是当我将json写入字符串时,该字符串似乎不是javascript的有效json; 它缺少一些逃脱。 (这发生在json中的一个字符串中,我将其格式化为人造json。)

例如,这将是我的javascript文件中的有效json:

{ "message": "the following books failed: [{\"book\": \"The Horse and his Boy\",\"author\": \"CS Lewis\"}, {\"book\": \"The Left Hand of Darkness\",\"author\": \"Ursula K. le Guin\"}, ]" } 

不过,我得到的是双引号未被转义的地方:

 { "message": "The following books failed: [{"book": "The Horse and his Boy","author": "CS Lewis"}, {"book": "The Left Hand of Darkness","author": "Ursula K. le Guin"}, ]" } 

当我这样做时,我得到了第二个结果:

 new ObjectMapper().writer().writeValueAsString(booksMessage); 

但是当我用jackson将它直接写入文件时,我得到了第一个好结果:

 new ObjectMapper().writer().writeValue(fileToWriteTo, booksMessage); 

那么为什么jackson在写入文件时会有不同的逃避方式,在编写字符串时如何让它像我一样逃脱呢?

ObjectWriter类的writeValue()方法对输入文本进行编码。

您不需要写入文件。 获取相同字符串的另一种方法可能是:

 StringWriter sw = new StringWriter(); new ObjectMapper().writer().writeValue(sw, booksMessage); String result = sw.toString(); 

我补充道

 booksJson = Pattern.compile("\\\\").matcher(booksJson).replaceAll("\\\\\\\\"); 

它逃脱了所有逃脱角色。 这样当我将它写入文件并删除转义时,我仍然有我需要的转义。 事实certificate我真正的问题是如何在没有删除Java转义的情况下写入文件。

我参加派对的时间很晚,但我遇到了类似的问题,我发现jackson或我的数据不是问题。 这是Java。 我正在读取JSON文件,然后尝试将其写入模板HTML文件。

我的原始JSON就像你的一行,类似于:

 {"field" : "This field contains what looks like another JSON field: {\"abc\": \"value\"}"} 

当我将上面的内容写入字符串时,abc和value中的引号之前的反斜杠消失了。 我注意到String.replaceAll的上下文帮助提到了一些关于Matcher.quoteReplacement的内容。 我离开了这个:

 template = template.replaceAll("%template%", jsonDataString); 

对此:

 Pattern pattern = Pattern.compile("%template%"); Matcher matcher = Pattern.matcher(template); matcher.replaceAll(matcher.quoteReplacement(jsonDataString)); 

问题解决了。

Matcher.quoteReplacement