2016-07-28 4 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()}