Джексон не ускользает от котировок в 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();