in reply to Re: JSON to HASH
in thread JSON to HASH

I use this particular routine asw a "perl module" for when i want to break down the querystring that I pass to another page/script, if you have another way, by all means, please offer it, it took me some time to figure out what i did get *heh*, but, my question is how i can read in a json string from my server and format it so I can reference it as $hashname{keyname} instead of the way I have "read" that I have to reference it as $hashname->{$keyname} with the "arrow" designator... I "use JSON" of course here. Is that what you were asking ? I can offer way more if neccessary, I was just looking for a way to maybe "map" the JSON string to a key/value %hash

I tried re-inventing the wheel again, but everytime I push it, it still falls flat on it's side...

Replies are listed 'Best First'.
Re^3: JSON to HASH
by BrowserUk (Patriarch) on May 15, 2016 at 06:32 UTC

    If you do:

    my $h = from_json( to_json( { a => 1, b => 2, c => [ 1..10 ], d => { ' +a'..'z' } } ) );;

    Then to reference key 'a' you need $h->{a};

    You can (at a small performance penalty) avoid that by doing:

    my %h = %{ from_json( to_json( { a => 1, b => 2, c => [ 1..10 ], d => +{ 'a'..'z' } } ) ) };; print $h{a};; 1

    With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    "Science is about questioning the status quo. Questioning authority". I knew I was on the right track :)
    In the absence of evidence, opinion is indistinguishable from prejudice.
      Let me play with that, I'll have to figure out how to read the string from the json file properly i imagine... i'm currently using:
      sub ServerData { $GSD_JSON = do { open (JSONDATA, "<:encoding(UTF-8)", "/HTTPS/prinet\.org/\.dat +a\.settings"); local $/; <JSONDATA> }; close (JSONDATA); $GSD_Handle = JSON->new; return ($GSD_Handle->decode($GSD_JSON)); }
      which gives me a one-liner $json_string (that i was trying to make a %hash with $key{$value} with. thanx, let me fiddle with your suggestion

      I tried re-inventing the wheel again, but everytime I push it, it still falls flat on it's side...
      Thanx so much BrowserUk, I was able to implement what you suggested into my subroutine to get what I was after...
      From:
      sub ServerData { //(package Get; $GSD_JSON = do { open (JSONDATA, "<:encoding(UTF-8)", "/HTTPS/prinet\.org/\.mai +n\.data"); local $/; <JSONDATA> }; close (JSONDATA); $GSD_Handle = JSON->new; return ($GSD_Handle->decode($GSD_JSON)); }
      To:
      sub ServerData { //(package Get; $GSD_JSON = do { open (JSONDATA, "<:encoding(UTF-8)", "/HTTPS/prinet\.org/\.mai +n\.data"); local $/; <JSONDATA> }; close (JSONDATA); $GSD_Handle = JSON->new; return (%{$GSD_Handle->decode($GSD_JSON)}); }
      Now all I have to do is figure out how to read the hash in the next routine that updates the json file... *hah*
      sub ServerData { //package Update; %USD_In = %_; use JSON; open (BUFFER, ">/HTTPS/prinet\.org/\.main\.data"); print BUFFER encode_json(%USD_In); close (BUFFER); }
      Which btw does not work...
      Thanx again...

      I tried re-inventing the wheel again, but everytime I push it, it still falls flat on it's side...
        %USD_In = %_;

        Unless you're doing something very strange globally,  %_ will always be empty. Maybe try
            %USD_In = @_;


        Give a man a fish:  <%-{-{-{-<