I'm working on a suite of HTTP/REST JSON web services, but running into a 
little strangeness. I figured I'm probably just not doing this right, so 
I'm posting here for clarification.

I am encoding LDAP attribute:value pairs to a hash, then encoding the hash 
to JSON. However, when I pass this encoded JSON to the render method of 
M::Controller, I get some strange escaping unless I specify it as 'data'.

Encoding data pulled from the Net::LDAP::Entry object:
@attrs = $entry->attributes;
foreach my $attr(@attrs) { $value = $entry->get_value($attr); 
$output{$attr} = $value;}
$json_output = $json->encode(\%output);

When I print out $json_output, everything is nicely encoded as I expect. It 
is when I try to render the response that I run into trouble unless I 
specify the 'data' directive.

So the following snippet:
return $c->render( data => $json_output, status => 200)  gives me 
{"someattribute":"somevalue"} 
as expected.

but:
return $c->render( json => $json_output, status => 200) gives me 
"{\"someattribute\":\"somevalue\"}" 
which I didn't expect.

I would love to be able to pass an unencoded hash into the 'json' method 
like so:

return $c->render( json => %output, status => 200)

or pass by reference:
return $c->render( json => \%output, status => 200)

but these exhibit the same behavior.

1.) What is causing this escaping behavior? I suspect it's something like 
I'm completely misunderstanding the 'json' directive to the render method.

2.) Is there a better way to pass a hash so that it is automatically 
encoded?

Any finger pointing in the appropriate direction is greatly appreciated.

-- 
You received this message because you are subscribed to the Google Groups 
"Mojolicious" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/mojolicious.
For more options, visit https://groups.google.com/d/optout.

Reply via email to