Fun times with JSON Rendering

I spent the last couple of hours on my pet project working with a specific issue. After moving it’s hosting to Google AppEngine the classes have meta data stored in them. I’m not allowed to reflect over the meta data (not sure I want to either). So JSON rendering has to be done on something other than the domain class.

This is the same Issue I posted about in a previous post, about rendering lists as JSON.

Now I’m rendering a single instance of a domain class. Now for the fun part. I can’t render JSON with the following statement.

render [ id: user.id, name: user.name, email: user.email, password: user.password ] as JSON

The above statement wont even compile. I also noticed is that the following will produce a rendered output, that cant be recognized at the client side javascript:

render ( id: user.id, name: user.name, email: user.email, password: user.password ) as JSON

I suspect that the above code will be transformed to a parameter listing for the render as JSON code.

After allot of trying I finally figure out that this works:

def userJson = [ id: user.id, name: user.name, email: user.email, password: user.password] render userJson as JSON

Fun!  I can render the variable holding the map, but not the map directly.