FreeMarker:Root的枚举

时间:2016-07-28 14:00:30

标签: freemarker

我希望枚举FTL中的根对象(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中代码不起作用(抛出错误)。

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

谢谢, 丹·林斯泰特

1 个答案:

答案 0 :(得分: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()}