Атрибут JSP JSON объект сбрасывает escape-символы в Javascript

1

У меня есть серверный контроллер, который добавляет атрибут, который является объектом 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 его правильно?

Теги:
jsp
escaping

1 ответ

1

Извините, написанный в конце долгого дня, когда он болен, и только что понял, что "тест" var становится полностью сформированным объектом JS. Поэтому я могу использовать это.

Тем не менее, я все еще вопрос о том, как это происходит? Мне кажется, что он должен появиться как строка JSON, которую мне нужно вызвать JSON.parse. У кого-нибудь есть объяснение?

  • 0
    В то время, когда вы commentObj в вашу модель, он уже был сериализован в строку JSON. В теге сценария вашего JSP вы назначаете его переменной. Это как если бы вы назначили буквенный массив javascript для var test . Другими словами, его тип javascript - это объект, а не строка. Если вы написали var test = '${commentObj}'; тогда это будет строка. Конечно, на стороне сервера в Java это строка. Но вы присваиваете литерал объекта переменной javascript. Радуйтесь, что вам не нужно разбирать строку.
  • 0
    Спасибо за ответ. Я могу понять, как он обрабатывается как объект на стороне JS по сравнению с литеральной строкой (если я не заключаю его в кавычки), но я до сих пор не понимаю, как JS знает, чтобы проанализировать его из JSON в объект без явной инструкции ,
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню