【问题标题】:Access Json "nicely" from groovy templates从 groovy 模板“很好地”访问 Json
【发布时间】: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 对象。

标签: json groovy playframework gson playframework-1.x


【解决方案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) {
    ...
}
}%

【讨论】:

  • 谢谢!这正是我希望找到的解决方案!为了清楚起见,我编辑了我的问题以包含最终模板。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-23
  • 1970-01-01
  • 2012-04-06
  • 2017-04-12
  • 1970-01-01
  • 1970-01-01
  • 2010-12-13
相关资源
最近更新 更多