user1882536
user1882536

Reputation: 13

Parsing JSON Data::Dumper output array in Perl

I'm trying to edit an old perl script and I'm a complete beginner. The request from the server returns as:

$VAR1 = [
          {
            'keywords' => [
                            'bare knuckle boxing',
                            'support group',
                            'dual identity',
                            'nihilism',
                            'support',
                            'rage and hate',
                            'insomnia',
                            'boxing',
                            'underground fighting'
                          ],
          }
        ];

How can I parse this JSON string to grab:

$keywords = "bare knuckle boxing,support group,dual identity,nihilism,support,rage and hate,insomnia,boxing,underground fighting"

Full perl code

#!/usr/bin/perl

use LWP::Simple;                # From CPAN
use JSON qw( decode_json );     # From CPAN
use Data::Dumper;               # Perl core module
use strict;                     # Good practice
use warnings;                   # Good practice
use WWW::TheMovieDB::Search;
use utf8::all;
use Encode;
use JSON::Parse 'json_to_perl';
use JSON::Any;
use JSON;

my $api = new WWW::TheMovieDB::Search('APIKEY');
my $img = $api->type('json');
$img = $api->Movie_imdbLookup('tt0137523');

my $decoded_json = decode_json( encode("utf8", $img) );

print Dumper $decoded_json;

Thanks.

Upvotes: 0

Views: 9320

Answers (3)

TLP
TLP

Reputation: 67890

Based on comments and on your recent edit, I would say that what you are asking is how to navigate a perl data structure, contained in the variable $decoded_json.

my $keywords = join ",", @{ $decoded_json->[0]{'keywords'} };

Upvotes: 1

FtLie
FtLie

Reputation: 773

The result you present is similar to json, but the Perl-variant of it. (ie => instead of : etc). I don't think you need to look into the json part of it, As you already got the data. You just need to use Perl to join the data into a text string.

Just to eleborate on the solution to vol7ron :

#get a reference to the list of keywords
my $keywords_list = $decoded_json->[0]{'keywords'};
#merge this list with commas
my $keywords = join(',', @$keywords_list );
print $keywords;

Upvotes: 0

vol7ron
vol7ron

Reputation: 42109

say qq{ @{ $arrayref->[0]->{'keywords'} } };

As TLP pointed out, all you've shown is a combination of perl arrays/hashes. But you should look at the JSON.pm documentation, if you have a JSON string.

Upvotes: 0

Related Questions