Skip to content

Instantly share code, notes, and snippets.

@thinkclay
Last active January 12, 2020 00:08
Show Gist options
  • Save thinkclay/426773ce4dac4fff41303461422b4e52 to your computer and use it in GitHub Desktop.
Save thinkclay/426773ce4dac4fff41303461422b4e52 to your computer and use it in GitHub Desktop.
Khoros/Freemarker utility macro for converting objects to JSON
<#macro objectToJson object, key = "unknown">
<@compress single_line=true>
<#if object?is_method>
${key}: "is_method"
<#elseif object?is_hash || object?is_hash_ex>
<#assign first="true">
{
<#list object as key, val>
<#if first="false">,</#if>
<#assign value><@objectToJson object=val!"null" key=key /></#assign>
"${key}" : <#if value??>${value}<#else>null</#if>
<#assign first="false">
</#list>
}
<#elseif object?is_enumerable>
<#assign first="true">
[
<#list object as item>
<#if first="false">,</#if>
<#assign value><@objectToJson object=item!"null" key="unknown" /></#assign>
<#if value??>${value}<#else>null</#if>
<#assign first="false">
</#list>
]
<#else>
<#if object?is_boolean>
${object?string("true", "false")}
<#elseif object?is_number>
${object}
<#else>
<#if object?is_string && object == "true">
true
<#elseif object?is_string && object == "false">
false
<#else>
<#if object??>"${object?string}"<#else>null</#if>
</#if>
</#if>
</#if>
</@compress>
</#macro>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment