Skip to content

Instantly share code, notes, and snippets.

@metafeather
Forked from narenranjit/VelToJSON
Created November 7, 2012 15:26
Show Gist options
  • Save metafeather/4032229 to your computer and use it in GitHub Desktop.
Save metafeather/4032229 to your computer and use it in GitHub Desktop.
Macros to convert Plain Old Java Objects in Velocity templates to JSON
#macro(POJOListToJSON $list )
#set($myList = $list )
{
#foreach($key in $myList.keySet())
#set($x = $myList.get($key))
"$key": #POJOToJSON($x) ##
#if($velocityCount != $myList.keySet().size())
,
#end
#end
}
#end
#macro(POJOArrayToJSON $arr)
#set($myArr = $arr)
[
#foreach($x in $myArr)
#POJOToJSON($x) ##
#if($velocityCount != $myArr.size())
,
#end
#end
]
#end
## try some common POJO Patterns
#macro(POJOPatternToJSON $item)
#set($match = false)
#if($item.name)
#set($match = true)
#set($name = $item.name)
#if($item.value)
#set($value = $item.value)
#end
#set($obj = {
"$item.name" : $item.value
})
#POJOToJSON($obj) ##
#end
#if($item.items)
#set($match = true)
#set($items = $item.items)
#POJOToJSON($items) ##
#end
#if(!$match)
##/* unknown POJO pattern for $item */
null
#end
#end
#macro(POJOToJSON $item)
$response.setContentType("application/json")
## standard JSON types
#if($item.keySet())
#POJOListToJSON($item)
#elseif($item.size())
#POJOArrayToJSON($item)
#elseif($item == true || $item == false)
$item
#elseif(!$item)
null
#elseif($item.length() == 0)
""
#elseif($item.length() && $item.matches("\d+"))
$item
#elseif($item.length())
"$item"
## try common POJO Patterns
#else
#POJOPatternToJSON($item)
#end
#end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment