Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask
 
PerlMonks  

Re: How to use a json string with nested array and nested hash elements?

by 7stud (Deacon)
on Feb 04, 2013 at 19:22 UTC ( #1016997=note: print w/ replies, xml ) Need Help??


in reply to How to use a json string with nested array and nested hash elements?

#ref($docoded_json->{strarry} confirms array. Store in array for easi +er processing: my @jsonarray = $decoded_json->{strarray};

That's not how it works. Look at this code:

use strict; use warnings; use 5.012; use strict; use warnings; use 5.012; my @arr = ('a', 'b', 'c'); my %hash; $hash{letters} = \@arr; say ref $hash{letters}; --output:-- ARRAY

The output does not mean that $hash{letters} is an array. The output means that $hash{letters} is a *reference* to an array. In fact, ref() returns an empty string if its argument is not a reference, e.g. an array. So the very fact that ref returns a non-empty string for $hash{letters} means that $hash{letters} is some kind of reference; and the output "ARRAY" tells you what kind of *reference* it is.

So your ref output means that this line:

my @jsonarray = $decoded_json->{strarray};

is equivalent to writing this:

my @jsonarray = $aref;

And because the left of the assignment is 'list context', and because the right side is not a list, the right side gets promoted to a one element list, giving you this:

my @jsonarray = ($aref);

That succeeds in nesting your reference inside the array @jsonarray. To access the whole array referenced by $aref, you would have to write:

@{ $jsonarray[0] }

So originally when you found out that the right side of this assignment:

my @jsonarray = $decoded_json->{strarray};

produced ARRAY when you called ref() on it, that meant the right side was a reference to an array, and therefore to get the whole array you needed to dereference the right side:

my @jsonarray = @{ $decoded_json->{strarray} };


Comment on Re: How to use a json string with nested array and nested hash elements?
Select or Download Code

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1016997]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others about the Monastery: (8)
As of 2015-07-29 07:18 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (260 votes), past polls