Джексон не ускользает от котировок в JSON

Я пытаюсь поместить json в javascript файл в java, но когда я пишу json в строку, строка не представляется допустимым json для javascript; ему не хватает некоторых побегов. (Это происходит в строке в json, которую я отформатировал как fux json.)

Например, это будет действительный json в моем файле javascript:

{
   "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);

Итак, почему же Джексон по-разному избегает записи при записи в файл и как мне его избежать, когда я пишу в строку?

Ответ 1

Я добавил

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

который пропускает все escape-символы. Таким образом, когда я пишу его в файл, и он удаляет экраны, у меня все еще есть пробелы, которые мне нужны. Таким образом, мой реальный вопрос заключается в том, как записать файл без удаления Java-экранов.

Ответ 2

Методы writeValue() класса ObjectWriter кодируют входной текст.

Вам не нужно писать в файл. Альтернативным подходом для получения одной и той же строки может быть:

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