[dancer-users] Returning JSON Data

Russell Jenkins russell.jenkins at strategicdata.com.au
Sun Sep 27 14:41:14 BST 2015


On 27/09/2015 11:54 am, Robert Smith wrote:
> JSON is enabled in config.yml
>
> serializer: "JSON"
> engines:
>      serializer:
>          JSON:
>              pretty: 1
>              allow_blessed: 1
>              canonical: 0
>              utf8: 1
>
> YAML is working fine as a serializer using the the following method:
> JSON prints mojibake when using the serializer using the following method:
>
>
> get '/establishments' => sub {
>          my $sql = 'select * from establishments';
>          my $sth = database->prepare($sql) or die database->errstr;
>          $sth->execute or die $sth->errstr;
>          #the following is broken in Dancer2
>          return \%{$sth->fetchall_hashref('id')};
> };
>


Provided you get characters (not octets) back from the database the 
above "just works".
If you are getting octets back they will get encoded again (with their 
default serializer params).
All Dancer2 serializers expect characters and return octets for adding 
to the response body.


Note the #686 is about a different issue; the to_json, to_yaml and 
to_dumper keywords.
Their implementation also returns octets, so when those keywords are 
used as the return
form a route the response is double encoded.


Hope that helps,
   Russell.



More information about the dancer-users mailing list