2013-11-09 2 views
12

Я пытаюсь поместить json в javascript-файл в java, но когда я пишу json для строки, строка не представляется допустимым json для javascript; ему не хватает некоторых побегов. (Это происходит в виде строки в формате JSON, который я отформатированный поддельной JSON.)Джексон не ускользает от котировок в 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); 

Но когда я пишу это непосредственно в файл с Джексоном, я первый, хороший результат:

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

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

+0

Ваш «действительный json» - странный формат. Почему у вас есть то, что похоже на массив, встроенный в ту же строку, что и '' Следующие книги не удалось: ...?? – nnnnnn

+0

Именно так я форматировал вывод метода toString() для списка этого объекта Это выглядит довольно странно, когда вы видите его внутри строки в JSON. – CorayThan

ответ

2

Я добавил

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

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

5

Методы ObjectWriter кодируют текст ввода.

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

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

Выполнение этого способа, похоже, не изменило результат. Я думаю, что проблема была на самом деле одна, я не показывал: 'FileUtils.writeStringToFile (tempFile, booksJson, false); 'Кажется, когда я написал его в файл' '\" "' стал бы "" "", а когда Джексон написал файл, он сохранил символ '' 'escape. – CorayThan

+0

Я просто что вы все еще можете использовать метод writeValue(). То, что вы описываете в своем вопросе, неоднозначно в том смысле, что, похоже, вы ожидаете, что некоторые кавычки будут экранированы, а другие нет. Если вы соберете некоторый компилируемый код (1 метод должен быть достаточным), с небольшим входным и ожидаемым выходом, проблема была бы легкой (если он фиксируется). – PNS

+0

Хороший материал, он удалил ненужные escape-символы и сохранил escape-символы для кавычек, чтобы JSON скомпилировал их. Благодаря! –

Смежные вопросы