#html #json #scala #playframework
#HTML #json #scala #playframework
Вопрос:
Я пытаюсь определить объект json в шаблоне с помощью JsValue play (версия 2.2.2). Проблема в том, "
что преобразуется в amp;quot;
@(org: db.Tables.OrganizationRow)
@import models.format.EntityFormat._
@import play.api.libs.json.Json
<script type="text/javascript">
var org = @Json.toJson(org);
</script>
результаты в:
{amp;quot;idamp;quot;:16,amp;quot;useridamp;quot;:amp;quot; ... more data ... };
Как я могу получить правильный json в шаблоне scala html?
Ответ №1:
Определите его так Html
, чтобы он не экранировался автоматически.
var org = @Html(Json.stringify(Json.toJson(org)));
Комментарии:
1. Кстати, для чего
@Javascript
@Txt
используется ? Они находятся в одном пакете с@Html
, но я думаю, что они просто ничего не делают.2. @Renkai Они используются, если вы используете шаблон другого типа в первую очередь. Например, в a
views/foo.scala.js
, который вы бы использовали@JavaScript(bar)
для необработанного (не экранированного JS) вывода значенияbar
. Как говорится в документах: «Если вы хотите вывести необработанный фрагмент содержимого, оберните его в тип содержимого шаблона» (т.е. @Html для .html, @Javascript для .js)3. Такой подход является правильным для надежных данных, но это не безопасно, в общем (если таковые имеются данные ненадежных затем злоумышленник может вырваться из контекста JS с «</script>»или «<!—«, even with correct js escaping). См. uploadcare.com/blog/vulnerability-in-html-design . В настоящее время не существует полностью безопасного механизма экранирования для этого контекста, предоставляемого Play.