in reply to Re: Convert to JSON, without a module?
in thread Convert to JSON, without a module?

Yup, I'm aware of that - but I'm trying to do it without extra perl modules (as its only that single line I need to print, as part of a JS script, which expects a JSON response)

This script is gonna be a "plugin", so I don't want people to have to install extra modules unnecesserily.

TIA

Andy
  • Comment on Re^2: Convert to JSON, without a module?

Replies are listed 'Best First'.
Re^3: Convert to JSON, without a module?
by bobr (Monk) on Sep 20, 2010 at 11:17 UTC
    Hi,

    I was having similar problem with to conversion to json on machine where modules cannot be installed. Here is what I end up with (some pieces copied from JSON::PP):

    sub to_json { my ($ref) = @_; if(ref($ref) eq "HASH") { return "{".join(",",map { "\"$_\":".to_json($ref->{$_}) } sort + keys %$ref)."}"; } elsif(ref($ref) eq "ARRAY") { return "[".join(",",map { to_json($_) } @$ref)."]"; } else { return "null" if ! defined $ref; return $ref if int($ref) eq $ref; my %esc = ( "\n" => '\n', "\r" => '\r', "\t" => '\t', "\f" => '\f', "\b" => '\b', "\"" => '\"', "\\" => '\\\\', "\'" => '\\\'', ); $ref =~ s/([\x22\x5c\n\r\t\f\b])/$esc{$1}/g; $ref =~ s/([\x00-\x08\x0b\x0e-\x1f])/'\\u00' . unpack('H2', $1 +)/eg; return "\"$ref\""; } }

    Just call it with reference

    print to_json({ this => 'that', other => 'whatever' });

    -- hope it helps, Roman