in reply to String to Integer, for json file

Looks like JSON::XS does the job:

use JSON::XS; use Data::Dumper; my %hash = ( cl_ip => 209890 ); my $json = encode_json \%hash; print Dumper( \%hash ); print qq($json\n); __END__ $VAR1 = { 'cl_ip' => 209890 }; {"cl_ip":209890}

Update:

I worry a bit about this. The OP wrote:

"...some strings that were supposed to be converted to integers are still strings...So a data dump looks good: 'cl_ip' => 209889, But there's a string in the json file for this key: "cl_ip":"209889"..."

From the JSON::XS manual:

"...Its primary goal is to be correct..."

The OP expects that the value of cl_ip is an integer after encoding, right?

In my example using JSON::XS the OP gets what he wants (integer).

IMHO JSON::XS works as designed - the result is what the OP expected.

If i still miss something: thanks for any advice.

I hope i didn't miss something. Regards Karl

«The Crux of the Biscuit is the Apostrophe»

Replies are listed 'Best First'.
Re^2: String to Integer, for json file (perlnumber)
by Anonymous Monk on Dec 12, 2013 at 09:35 UTC
    perlnumber
    use JSON qw/ to_json from_json /;
    use Devel::Peek qw/ Dump /;
    my $q = 3;
    print "$q\n";
    Dump( $q );
    print to_json( { a => 3, qw/ b 3 q/, $q } );
    __END__
    3
    SV = PVIV(0x9a3778) at 0x99b524
      REFCNT = 1
      FLAGS = (PADMY,IOK,POK,pIOK,pPOK)
      IV = 3
      PV = 0xad23bc "3"\0
      CUR = 1
      LEN = 12
    {"a":3,"q":"3","b":"3"}
    "a" gets 3 the number, b gets 3 the string , q becomes the 3 string
Re^2: String to Integer, for json file
by halecommarachel (Sexton) on Dec 12, 2013 at 19:47 UTC

    Hi Karl, I haven't installed JSON::XS yet (don't want to install dependencies yet) - could you try this out?

    my %hash; $hash{'cl_ip'} = "29988" + 0;
    I think the value is treated as a string at some point, perhaps when I search and replace any non-digit character. Thanks, Rachel

      "...could you try this out?"

      Why not, nice invitation:

      karls-mac-mini:monks karl$ perl -MData::Dumper -e '$hash{'cl_ip'} = "2 +9988" + 0;print Dumper(\%hash);'$VAR1 = { 'cl_ip' => 29988 };

      But: so what ;-)

      Update:

      D'oh! Mille Regretz!

      #!/usr/bin/env perl + use JSON::XS; use Data::Dumper; my %hash = ( cl_ip => 209890 ); my $json = encode_json \%hash; print Dumper( \%hash ); print qq($json\n); $hash{ cl_ip } += 0; $json = encode_json \%hash; print Dumper( \%hash ); print qq($json\n); __END__ karl-mac-mini:monks karl$ ./json.pl + $VAR1 = { + 'cl_ip' => 209890 + }; + {"cl_ip":209890} + $VAR1 = { + 'cl_ip' => 209890 + }; + {"cl_ip":209890}

      Update2:

      #!/usr/bin/env perl + use JSON::XS; use Data::Dumper; my %hash = ( cl_ip => 209890 ); my $json = encode_json \%hash; print Dumper( \%hash ); print qq($json\n); $hash{ cl_ip } += 0; $json = encode_json \%hash; print Dumper( \%hash ); print qq($json\n); $hash{ cl_ip } = "209890"; $json = encode_json \%hash; print Dumper( \%hash ); print qq($json\n); __END__ $VAR1 = { 'cl_ip' => 209890 }; {"cl_ip":209890} $VAR1 = { 'cl_ip' => 209890 }; {"cl_ip":209890} $VAR1 = { 'cl_ip' => '209890' }; {"cl_ip":"209890"}

      I'll give it up for tonight before i produce more shit...

      Update3:

      I'll give it up...

      I don't:

      #!/usr/bin/env perl use JSON::XS; use Data::Dumper; use strict; use warnings; my %hash = ( cl_ip => 209890 ); print Dumper( \%hash ); print qq(\n); my $json = encode_json \%hash; print qq($json\n\n); #------------------------------ $hash{cl_ip} += 0; print Dumper( \%hash ); print qq(\n); $json = encode_json \%hash; print qq($json\n\n); #------------------------------ $hash{cl_ip} = "209890"; print Dumper( \%hash ); print qq(\n); $hash{cl_ip} += 0; print Dumper( \%hash ); print qq(\n); $json = encode_json \%hash; print qq($json\n\n); __END__ karl-mac-mini:monks karl$ ./json.pl $VAR1 = { 'cl_ip' => 209890 }; {"cl_ip":209890} $VAR1 = { 'cl_ip' => 209890 }; {"cl_ip":209890} $VAR1 = { 'cl_ip' => '209890' }; $VAR1 = { 'cl_ip' => 209890 }; {"cl_ip":209890}

      My best regards, Karl

      «The Crux of the Biscuit is the Apostrophe»