从 groovy 模板“很好地”访问 Json
Posted
技术标签:
【中文标题】从 groovy 模板“很好地”访问 Json【英文标题】:Access Json "nicely" from groovy templates 【发布时间】:2013-01-07 16:32:33 【问题描述】:我有一个从控制器接收 JsonArray (gson) 的 groovy 模板。我想要做的是生成一些 html,其中填充了该数组中包含的 JsonObjects 中的一些信息。像这样的东西(为清楚起见进行了简化):
<ul>
#list items: sections, as:'section'
<li>$section.getAsJsonObject().get("title").getAsString()
<ul>
#list items: section.getAsJsonObject().getAsJsonArray("articles"), as:'article'
<li><a href="$article.getAsJsonObject().get("url").getAsString()">$article.getAsJsonObject().get("title").getAsString()</a></li>
#/list
</ul>
</li>
#/list
</ul>
我发现必须一直执行整个 getAsJsonWhatever() 非常不方便。你知道替代方案吗?
请记住,以下不是我要寻找的答案:
将 json 发送到客户端并使用 javascript 完成 使用控制器中的代码进行操作 使用 % % 标签内的代码来实现 将 json 对象转换为控制器中的 java 对象并将其传递给模板(不过这是我最喜欢的替代方法)编辑:解决方案
这就是应用 Seb 的解决方案后的结果:
控制器:
Object json = slurper.parseText(response.getString());
render(json);
模板:
<ul>
#list items: json.data.publication.sections, as:'section'
<li>$section.title
<ul>
#list items: section.articles, as:'article'
<li><a href="$article.url">$article.title</a></li>
#/list
</ul>
</li>
#/list
</ul>
【问题讨论】:
只是好奇,为什么是 JSON?为什么不只是 Java 对象? 因为 json 来自我对控制器中不同 API 的请求,我认为也许 groovy 会有一些很酷的方法来处理这些,所以我不需要转换将 json 对象传递给控制器中的 java 对象,并将 java 对象传递给模板。 我会将其重写为控制器上的 Java 对象。 【参考方案1】:我猜你是从 WS 调用中得到你的 json 的。
您可以将结果作为字符串获取,并使用 groovy.json.JsonSlurper.parseText 方法获取 groovy 对象,而不是使用默认 WS 方法转换 json 的结果,该对象可以用作 groovy 中的标准对象模板。
这是我在其中一个模板中所做的事情
%
def slurper = new groovy.json.JsonSlurper()
def jsonResult = slurper.parseText(response.getString())
if (jsonResult.success)
...
%
【讨论】:
谢谢!这正是我希望找到的解决方案!为了清楚起见,我编辑了我的问题以包含最终模板。以上是关于从 groovy 模板“很好地”访问 Json的主要内容,如果未能解决你的问题,请参考以下文章
Django - 一个计数器模板标签,即使使用嵌套的 for 标签也能很好地工作
什么 Javascript 框架可以很好地与 Grails 集成?
Netsuite / Freemarker - 访问电子邮件模板中的交易行级别数据