Update to my previous submission. I added an if block so it doesn't break if there are no request parameters. Please replace this text with the description from my previous submission, then delete the old one.
##################################################################################
##
## @title Convert Velocity request parameters to JSON
##
## @purpose Convert GET/POST vars into JSON Object using ONLY Velocity script
##
## @author nathan.keiter@gmail.com
##
## @notes This demo is optimized for readibility. Output can be easily minified
## by removing whitespace and subtracting 1 instead of 2 from $jsonString.length()
## I realize I could just write an OSGI ViewTool to do the conversion, but this
## might be helpful to people who aren't comfortable doing that.
##
## @example URL
## www.example.com/test?field1=value1&field2=value2&field3=value3
##
## @example output
## { "field3" : "value3", "field2" : "value2", "field1" : "value1" }
##
##################################################################################
#set( $jsonString = "" )
#set( $jsonObject = "{}" )
## Retrieve the request parameter keys
#foreach ( $key in $request.getParameterMap().keySet() )
## Retrieve the request parameter value
#set( $value = $request.getParameter( $key ) )
## json escape the value String
#set( $value = $esc.javascript( $value ) )
## jsonify the key->value property set
#set( $jsonProperty = "\"" + $key + "\" : " + "\"" + $value + "\", " )
## Append to properties String
#set( $jsonString = $jsonString + $jsonProperty )
#end
#if ( $jsonString.length() > 0 )
## Trim off the last comma space from the properties String
## Wrap properties String into JSON Object notation {}
#set( $jsonStringLength = $jsonString.length() - 2 )
#set( $jsonObject = "{ " + $jsonString.substring( 0, $jsonStringLength ) + " }" )
#end
## Output to page or pass into ViewTool as argument
$jsonObject