PerlSufi has asked for the wisdom of the Perl Monks concerning the following question:

Hello Monks,
I have an issue where I am trying to check JSON decoded data from Dancer params. My module has something like this:
use strict; use warnings; use Dancer; use JSON qw(decode_json); my $foo_info = param('foo_info'); if ( !eval { decode_json($foo_info); 1 } ) { flash error => "Failed" } if ( !exists $foo_info->{foo_total} || !($foo_info->{foo_total} =~ m/^\$\d+\.\d{2}$/)) { error("Invalid or missing foo info"); return 0; }
And the errors that I am getting are:
Error decoding json data: malformed JSON string, neither tag, array, object, number, string or +atom, at character offset 0 (at the line I'm decoding the json) request to POST /path/to/site crashed: Can't use string .. (json data +spit out here) as a HASH ref
So my problem may be 2 fold, but I do know I need help checking the values in the JSON 'foo_info' ..Any insight is greatly appreciated :)

Replies are listed 'Best First'.
Re: Checking JSON decoded params from Dancer
by Corion (Patriarch) on Jul 11, 2014 at 16:55 UTC

    decode_json is a function. It returns the data structure and does not modify its argument in place. You might want:

    my $foo; my $ok= eval { $foo= decode_json( $foo_info ); 1; }; if( ! $ok ) { my $err= $@; flash error => "Failed"; warn "JSON Decoder got '$err'"; }; # Now we have the decoded data structure in $foo warn Dumper $foo;
      Thanks Corion- good to know. I am still trying to figure out how to correctly parse the data to see if I have the correct field and value in the json..
Re: Checking JSON decoded params from Dancer
by roboticus (Chancellor) on Jul 11, 2014 at 16:55 UTC

    PerlSufi:

    The string foo_info doesn't look much like JSON...

    Update: My mistake--I misread the code.

    ...roboticus

    When your only tool is a hammer, all problems look like your thumb.