2013-01-07 72 views
1

我有一個groovy模板從控制器接收JsonArray(gson)。我想要做的是生成一些HTML,其中包含該數組中包含的JsonObjects的一些信息。像這樣(簡化爲清楚起見):從常規模板訪問Json「很好」

<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()所有的時間。你知道另一個選擇嗎?

請記住下面的不是我要找的答案:

  • 用JavaScript
  • 發送JSON到客戶端,並做到在控制器的代碼做
  • 與%{}標籤內的代碼
  • JSON對象轉換爲Java對象在控制器和它傳遞給模板做(這是雖然我最喜歡的替代)

編輯:解

這是事情的結束將塞巴斯蒂安的解決方案後,尋找:

控制器:

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> 
+0

只是好奇一個,爲什麼JSON?爲什麼不只是Java對象? – biesior

+0

,因爲json來自我對控制器中的不同API的請求,並且我認爲groovy可能有一些很酷的方式來處理這些,所以我不需要將json對象轉換爲java對象在控制器中並將java對象傳遞給模板。 – palako

+0

我會重寫它到控制器上的Java對象。 – biesior

回答

1

我想你你的json來自WS調用。

而不是用默認的WS方法轉換您的json的結果,你可以得到你的結果作爲一個字符串,並使用groovy.json.JsonSlurper.parseText方法來獲得一個groovy對象,您可以在您的標準對象時髦的模板。

這是我做的我的模板

%{ 
def slurper = new groovy.json.JsonSlurper() 
def jsonResult = slurper.parseText(response.getString()) 

if (jsonResult.success) { 
    ... 
} 
}% 
+0

謝謝!這正是我希望找到的那種解決方案!爲了清晰起見,我編輯了我的問題以包含最終的模板。 – palako