从 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 标签也能很好地工作

从 django 模板访问 JSON 属性

什么 Javascript 框架可以很好地与 Grails 集成?

Netsuite / Freemarker - 访问电子邮件模板中的交易行级别数据

Groovy:使用GStringTemplateEngine()在模板引擎中的多个循环

带有 Rails API 的 Django 应用程序