2016-07-28 5 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> 

하지만 코드가 작동하지 않는 프리 마커의 최신 버전에 (에러가 발생합니다).

누구든지 제공 할 수있는 도움을 주시면 감사하겠습니다. 또한 루트 객체를 "가져 오는"방법이 표시되지 않습니다.

감사합니다, 댄 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); 
} 

내가 프리 마커에 필요하지 않았다, 그러나 당신이 그것을 좋아 액세스 할 수 :

${toJson()} 
관련 문제