我有一个从控制器接收 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>