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 在浏览器中打印 Spring Boot JSON RESTful 响应
在 Node.js 中使用 BigQuery 将 JSON 作为字符串导入
Bootstrap + Thymeleaf——预约维修前端页面设计(UI + JS数据校验 + JSON序列化 + AJAX提交)DEMO