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

Posted

技术标签:

【中文标题】Thymeleaf 将 JSON 字符串作为 JSON 对象打印到 javascript 变量中【英文标题】:Thymeleaf print JSON string as JSON object into a javascript variable 【发布时间】:2015-06-26 08:02:17 【问题描述】:

具体

我需要一种通过 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 做到这一点,但我需要通过百里香来做到这一点:)

【问题讨论】:

我认为 ***.com/questions/28633329/… 和 forum.thymeleaf.org/… 会有所帮助 谢谢@PatrickLC 正如我在问题中提到的那样,我现在实际上正在这样做。但是如果在 thymeleaf 中有一个直接的方法来像th:utext 那样做这件事不是很好:) 我同意这会很有用,您可以找到两个相关的问题:github.com/thymeleaf/thymeleaf/issues/12 和 github.com/thymeleaf/thymeleaf/issues/81 【参考方案1】:

更新 - 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 所提到的,报告了两个问题。

    unescaped inline for scripts/css #12

    Use Jackson for Javascript inlining of JSON #81

【讨论】:

【参考方案2】:

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

主要特点:

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

【讨论】:

以上是关于Thymeleaf 将 JSON 字符串作为 JSON 对象打印到 javascript 变量中的主要内容,如果未能解决你的问题,请参考以下文章

thymeleaf 接受字符串类型model值作为js方法参数报错500

Thymeleaf模板引擎的初步使用

使用 thymeleaf 在浏览器中打印 Spring Boot JSON RESTful 响应

在 Node.js 中使用 BigQuery 将 JSON 作为字符串导入

Bootstrap + Thymeleaf——预约维修前端页面设计(UI + JS数据校验 + JSON序列化 + AJAX提交)DEMO

thymeleaf 页面布局 怎么把所有js文件放入一个页面