杰克逊没有在 JSON 中转义引号

2022-09-03 15:42:24

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

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

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

但是,以下是我得到的,其中双引号没有被转义:

{
   "message": 
   "The following books failed: [{"book": "The Horse and his Boy","author": "C.S. 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在写入文件时会以不同的方式转义,以及我如何在写入字符串时让它像这样转义呢?


答案 1

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

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

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

答案 2

我添加了

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

它转义了所有转义字符。这样,当我把它写到file并删除它的转义时,我仍然有我需要的转义。所以事实证明,我真正的问题是如何在不删除Java转义的情况下写入文件。