Skip to content

JSON error handling improvement #47

Description

@kobaz

Hi!

use JSON;

my $foo = JSON::from_json('{blah}');

$ perl /tmp/a.pl
'"' expected, at character offset 1 (before "blah}") at JSON.pm line 198.

This makes it look like there's an error in JSON.pm, due to a die()

Or

use JSON;

my $foo = JSON::to_json(\*STDERR);

$ perl /tmp/a.pl
cannot encode reference to scalar 'GLOB(0x558052844fd0)' unless the scalar is 0 or 1 at JSON.pm line 176.

Attached patch to kick errors back to the caller, referencing the caller stack location instead

diff --git a/lib/JSON.pm b/lib/JSON.pm
index 3e644cc..39d7b1f 100644
--- a/lib/JSON.pm
+++ b/lib/JSON.pm
@@ -170,7 +170,12 @@ sub to_json ($@) {
         }
     }

-    $json->encode($_[0]);
+   my $result;
+   eval { $result = $json->encode($_[0]); };
+
+   Carp::croak "to_json: "  . $@ if ($@);
+
+   return $result;
 }


@@ -187,7 +192,12 @@ sub from_json ($@) {
         }
     }

-    return $json->decode( $_[0] );
+    my $result;
+    eval { $result = $json->decode( $_[0] ) };
+
+    Carp::croak "from_json: "  . $@ if ($@);
+
+    return $result;
 }

Now we have a nice error:

$ perl test_json.pl
from_json: '"' expected, at character offset 1 (before "blah}") at JSON.pm line 196.
 at test_json.pl line 4.

json_croak.master.ebbae18.zip

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions