杰克逊没有逃避JSON中的引用

Cor*_*han 14 javascript java json jackson

我正在尝试将json放在java中的javascript文件中,但是当我将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\"}, ]"
}
Run Code Online (Sandbox Code Playgroud)

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

{
   "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"}, ]"
}
Run Code Online (Sandbox Code Playgroud)

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

new ObjectMapper().writer().writeValueAsString(booksMessage);
Run Code Online (Sandbox Code Playgroud)

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

new ObjectMapper().writer().writeValue(fileToWriteTo, booksMessage);
Run Code Online (Sandbox Code Playgroud)

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

PNS*_*PNS 5

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

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

StringWriter sw = new StringWriter();
new ObjectMapper().writer().writeValue(sw, booksMessage);
String result = sw.toString();
Run Code Online (Sandbox Code Playgroud)


Cor*_*han 2

我添加了

booksJson = Pattern.compile("\\\\").matcher(booksJson).replaceAll("\\\\\\\\");
Run Code Online (Sandbox Code Playgroud)

它转义所有转义字符。这样,当我将其写入文件并删除转义符时,我仍然拥有所需的转义符。结果我真正的问题是如何在不删除 Java 转义的情况下写入文件。