2016-07-28 14 views
0

Ich bin auf der Suche nach dem Stammobjekt in FTL (freeMarker Vorlage Sprache). für alle Hash-Arrays und alle Sequenzarrays und alle Standardschlüsselwertobjekte.FreeMarker: Enumeration von Root

Ich brauche Ausgabe im JSON-Format. Ich habe das geschrieben Code für JSON-Enumeration gefunden: 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> 

Aber der Code funktioniert nicht (wirft einen Fehler) in der aktuellen Ausgabe von Freemarker.

Ich würde jede Hilfe schätzen, die jeder zur Verfügung stellen kann. Außerdem sehe ich keinen Weg, das Wurzelobjekt zu "bekommen".

Danke, Dan Linstedt

+0

Und welche Fehler werfen ist das? –

+0

Das Datenmodell (ich nehme an, Sie meinen das mit dem root-Objekt) ist als '.data_model' zugänglich (siehe http://freemarker.org/docs/ref_specvar.html). – ddekany

Antwort

0

Ich löste dies durch eine öffentliche Methode zu meinem Stammobjekt hinzugefügt, die JSON selbst kodiert. Ich habe Gson verwendet, um das Objekt zu marshalieren.

/** 
* @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); 
} 

Ich brauche es nicht in Freemarker, aber man konnte es mag Zugang:

${toJson()}