【问题标题】:FreeMarker: Enumeration of RootFreeMarker:根的枚举
【发布时间】:2016-12-02 23:36:38
【问题描述】:

我希望枚举 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 中不起作用(引发错误)。

如果有人能提供任何帮助,我将不胜感激。另外,我看不到“获取”根对象的方法。

谢谢, 丹·林斯特

【问题讨论】:

标签: freemarker


【解决方案1】:

我通过向我的根对象添加一个 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()}

【讨论】:

    猜你喜欢
    • 2011-10-28
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 2015-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多