2016-07-28 183 views
0

我期待枚举FTL(freeMarker模板语言)中的根对象。用于所有散列数组,所有序列数组以及所有标准键值对象。FreeMarker:枚举根

我需要JSON格式的输出。 我已经找到了张贴代码JSON枚举: http://ericbrandel.com/2013/03/28/freemarker-container-to-json/

<#macro objectToJsonMacro object> 
<@compress single_line=true> 
    <#if object?is_hash || object?is_hash_ex> 
    <#assign first="true"> 
    { 
    <#list object?keys as key> 
     <#if first="false">,</#if> 
     <#assign value><@objectToJsonMacro object=object<key> /></#assign> 
     "${key}" : ${value?trim} 
     <#assign first="false"> 
    </#list> 
    } 
    <#elseif object?is_enumerable> 
    <#assign first="true"> 
    [ 
    <#list object as item> 
     <#if first="false">,</#if> 
     <#assign value><@objectToJsonMacro object=item /></#assign> 
     ${value?trim} 
     <#assign first="false"> 
    </#list> 
    ] 
    <#else> 
    "${object?trim}" 
    </#if> 
</@compress> 
</#macro> 

但代码不起作用在FreeMarker的最新版(抛出一个错误)。

我希望任何人都可以提供帮助。另外,我没有看到“获取”根对象的方法。

感谢, 丹Linstedt

+0

而且它抛出什么样的错误? –

+0

数据模型(我想这就是你所说的根对象)可以用'.data_model'来访问(参见http://freemarker.org/docs/ref_specvar.html)。 – ddekany

回答

0

我加入一个公共的方法来我的根对象,JSON编码本身解决了这个。我使用Gson来编组对象。

/** 
* @return JSON serialized version of this object. 
*/ 
public String toJson() 
{ 
    GsonBuilder gsonBuilder = new GsonBuilder(); 
    //gsonBuilder.setPrettyPrinting(); 
    //gsonBuilder.disableHtmlEscaping(); 
    // .. and whatever else you need Gson to do 
    return gsonBuilder.create().toJson(this); 
} 

我并不需要它在FreeMarker的,但你可以访问它想:

${toJson()}