我希望枚举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中代码不起作用(抛出错误)。
我很感激任何人都可以提供帮助。另外,我没有看到“获取”根对象的方法。
谢谢, 丹·林斯泰特
答案 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()}