in reply to Re: Parsing Array of arrays from json file
in thread Parsing Array of arrays from json file

The Dump of @records is:

$VAR1 = [ [ [ 'Sciences | ', 'Science |', undef, undef, 3, undef, undef, [ [] ], [ [ [ 'f1ddc8227c19e618ac5e77c96270b0d5', 'en_fr_2021q1.md' ] ] ] ], [ 'Recherche | ', 'Research |', undef, undef, 3, undef, undef, [ [] ], [ [ [ 'f1ddc8227c19e618ac5e77c96270b0d5', 'en_fr_2021q1.md' ] ] ] ], [ 'Intelligence artificielle', 'Artificial Intelligence', undef, undef, 1 ] ] ];

Replies are listed 'Best First'.
Re^3: Parsing Array of arrays from json file
by LanX (Saint) on Sep 12, 2021 at 10:27 UTC
    > The Dump of @records is:

    unlikely, maybe a dump of \@records ?

    In any case it looks like you got the nesting levels wrong, please try

     my @records = $decoded_json[0][0];

    or

     my @records = $decoded_json[0][0][0];

    Cheers Rolf
    (addicted to the Perl Programming Language :)
    Wikisyntax for the Monastery

      Dereferencing did the trick! Thank you

      right, Dump was of \@records.

      Both your fixes return the following errors:

      Can't use string ("Sciences | ") as an ARRAY ref while "strict refs" in use at test.pl line 24.

      By the way, the code snippet runs without the need of any credentials, if this may help.

        Now I was able to run it:

        Based on Re^5: Parsing Array of arrays from json file this seems to "work":

        (FWIW I'm not happy with the code though, YMMV)

        use strict; use warnings; use Data::Dumper; use LWP::UserAgent; use JSON::PP; my $ua = LWP::UserAgent->new( ); $ua->agent("Mozilla"); my $segment = "Science | Research | Artificial Intelligence"; my $url='https://translate.googleapis.com/translate_a/single?client=gt +x&sl=en&tl=fr&dt=t&q=' . $segment; my $req = HTTP::Request->new(GET => $url); my $res = $ua->request($req); if ($res->is_success) { my $json_text= $res->content; #warn Dumper my $decoded_json = decode_json( $json_text ); my @decoded_json=@$decoded_json; my @records = @{$decoded_json[0]}; # <-- fixed derefrencing #warn Dumper \@records; foreach my $record (@records) { print Dumper $record; print "Translation for @$record[1] is @$record[0]\n"; } } else { print "\nError connecting to server\n"; }

        OUTPUT

        Cheers Rolf
        (addicted to the Perl Programming Language :)
        Wikisyntax for the Monastery

        Your code is confusing because you are reusing the same symbol names.

        I can't test because I'm on mobile now.

        Please note that this

        my @records = $decoded_json[0];

        Will create an array with just one entry, you may want try

        my @records = @{$decoded_json[0]};
        Plus correct nesting levels.

        I could help better if the dump and code was clearer...

        Cheers Rolf
        (addicted to the Perl Programming Language :)
        Wikisyntax for the Monastery