Thymeleaf 将 JSON 字符串作为 JSON 对象打印到 javascript 变量中

Thymeleaf print JSON string as JSON object into a javascript variable

具体

我需要一种方法来通过 thymeleaf 将字符串值的 JSON 表示形式打印到 html 页面中。

详细

我有一个 model attribute,其中包含一个字符串,该字符串实际上是 JSON

的字符串表示形式

我的thymeleaf代码

<script th:inline="javascript">
  var value = [[${data.scriptValue}]];
</script>

如下打印变量

var value = '[[\"asd\",\"3\"],[\"asd\",\"1\"],[\"asdasd\",\"1\"]]';

但我想要这样的东西作为 javascript/JSON 数组

var value = [["asd","3"],["asd","1"],["asdasd","1"]];

如何在百里香中做到这一点?


注意:我知道我可以从 JSON.Parse 做到这一点,但我需要一种从 thymeleaf 做到这一点的方法:)

更新 - 2015/12/24

此功能在 Thymeleaf 3 中可用

https://github.com/thymeleaf/thymeleaf/issues/395

中参考The Thymeleaf textual syntax
// Unescaped (actual answer)
var value = [(${data.scriptValue})];
//or
var value = [# th:utext="${data.scriptValue}"/];

// Escaped
var value = [[${data.scriptValue}]];
//or
var value = [# th:text="${data.scriptValue}"/];

Thymeleaf 2 不可能。 正如 Patric LC 提到的,报告了两个问题。

  1. unescaped inline for scripts/css #12

  2. Use Jackson for Javascript inlining of JSON #81

@Faraj,Thymeleaf 的新版本提供了此功能。他们针对您提到的问题实施功能。你可以在这里看: http://www.thymeleaf.org/doc/articles/thymeleaf3migration.html

主要特点:

  • 三种文本模板模式:TEXT、JAVASCRIPT和CSS。
  • 文本模板模式中元素的新语法:[# ...] ... [/]
  • 允许内联输出表达式,包括转义的 ([[...]]) 和未转义的 ([(...)])
  • 智能转义 JavaScript(作为文字)和 CSS(作为标识符)。
  • 解析器级 (/*[- ... -]*/) 和仅限原型的 (/*[+ ... +]*/) 评论块。
  • 自然模板应用于 JAVASCRIPT 脚本和 CSS 样式表,通过包装元素 and/or 注释中的输出表达式 (/*[# ...]*/).