2013-07-22 3 views
3

일부 값이 null 인 JSon을 처리 할 때 Freemarker가? eval에서 오류를 발생시킵니다.Freemarker를 사용하여 null 값을 가진 JSon을 평가하십시오.

mapper.setSerializationInclusion(Inclusion.NON_NULL) 나는 이것을 피할 수는 있지만 생성 된 JSon에 대해서는이 정보가 누락되었습니다.

이 null 값으로 평가를 수행하는 방법이 있습니까? (이 2.4로 변경됩니다 수도 있지만) 평가

(infuriatingly 한 나 ...)
<#assign test = "{\"foo\":null}"> 
<#assign m = test?eval> <#-- fail in eval --> 
${m.foo} 

답변

5
불행하게도

에서

<#assign test = "{\"foo\":\"bar\"}"> 
<#assign m = test?eval> 
${m.foo} <#-- prints: bar --> 

실패는 FTL은 null의 개념을 알 수 없습니다. 따라서 foo 키가 있지만 그 값이 null 인 JSON (Map을 Java에서 작성한 것처럼)에서 Map을 생성하더라도 ${m.foo}은 여전히 ​​실패합니다. 확실히 ${m.foo!'null'}을 쓸 수는 있지만, foo 키가 전혀 없다고해도 null이 인쇄됩니다. 당신은 JSON 평가 동안 null -s 에 대한 기본값을 제공하는 경우 그래서 어쩌면 더 나은 :

<#function parseJSON json> 
    <#local null = 'null'> <#-- null is not a keyword in FTL --> 
    <#return json?eval> 
</#function> 

${parseJSON("{\"foo\":null}").foo} <#-- prints null --> 

지금, 그러나, 당신이 "null"null의 차이를 말할 수 없다. 그게 문제라면, '@@@null'과 같은 이상한 기본값을 선택하거나 지표 값으로 매크로를 사용한 다음 ?is_macro을 사용하여 값이 null인지 테스트 할 수 있습니다 (JSON 평가로 매크로를 생성 할 수 없으므로 해킹이 유용합니다) ...

관련 문제