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

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.

Replies are listed 'Best First'.
Re^5: Parsing Array of arrays from json file
by LanX (Saint) on Sep 12, 2021 at 10:58 UTC
    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

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

      here a cleaned up version, I prefixed all array_refs with a_ for clarity:

      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; my $a_decoded_json = decode_json( $json_text ); my $a_records = $a_decoded_json->[0]; foreach my $a_record (@$a_records) { print "Translation for $a_record->[1] is $a_record->[0]\n"; } } else { print "\nError connecting to server\n"; }

      OUTPUT

      -*- mode: compilation; default-directory: "d:/tmp/pm/" -*- Compilation started at Sun Sep 12 13:15:11 C:/Strawberry/perl/bin\perl.exe -w d:/tmp/pm/google_translate.pl Translation for Science | is Sciences | Translation for Research | is Recherche | Translation for Artificial Intelligence is Intelligence artificielle Compilation finished at Sun Sep 12 13:15:12

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

Re^5: Parsing Array of arrays from json file
by LanX (Saint) on Sep 12, 2021 at 10:47 UTC
    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