У меня есть серверный контроллер, который добавляет атрибут, который является объектом Java, преобразованным в JSON, используя Jackson:
ObjectMapper mapper = new ObjectMapper();
model.addAttribute("commentObj", mapper.writeValueAsString(commentObject);
Мой комментарийОбъект имеет поле "комментарии", которое содержит кавычки ("), которые должен удалить JSON. Когда я делаю простой распечаток из JSP объекта commentObject, все выглядит хорошо:
[{"commentId":123,"comments": "this \"test\" is here"}]
Как видите, кавычки выходят из строя (\ ").
Моя проблема связана с javascript на этой странице, который также должен получить доступ к этому объекту. Поэтому, когда я запускаю следующее:
<script>
var test = ${commentObj};
</script>
Если я посмотрю на "test" var, поле комментариев теперь будет выглядеть следующим образом:
"this "test" is here"
vs.
"this \"test\" is here"
Это вызывает проблему, потому что JSON.parse() выдает ошибку в "test", потому что она больше не сформирована JSON.
Итак, мой вопрос: как мне получить свой комментарийObj в javascript-объект, сохраняя escape-символы, чтобы я мог JSON.parse его правильно?
Извините, написанный в конце долгого дня, когда он болен, и только что понял, что "тест" var становится полностью сформированным объектом JS. Поэтому я могу использовать это.
Тем не менее, я все еще вопрос о том, как это происходит? Мне кажется, что он должен появиться как строка JSON, которую мне нужно вызвать JSON.parse. У кого-нибудь есть объяснение?
commentObj
в вашу модель, он уже был сериализован в строку JSON. В теге сценария вашего JSP вы назначаете его переменной. Это как если бы вы назначили буквенный массив javascript дляvar test
. Другими словами, его тип javascript - это объект, а не строка. Если вы написалиvar test = '${commentObj}';
тогда это будет строка. Конечно, на стороне сервера в Java это строка. Но вы присваиваете литерал объекта переменной javascript. Радуйтесь, что вам не нужно разбирать строку.