2016-07-28 3 views
0

Я ищу для перечисления корневого объекта в FTL (язык шаблона FreeMarker). для всех хэш-массивов и всех массивов последовательностей, а также для всех стандартных значений значений ключа.FreeMarker: Enumeration of Root

Мне нужен выход в формате 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.

Буду признателен за любую помощь, которую может предоставить любой человек. Кроме того, я не вижу способа «получить» корневой объект.

Спасибо, Dan 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()}