http://qs321.pair.com?node_id=11125556


in reply to How can I convert this raw data to a hash?

The data you have is JSON. And a module such as JSON has decode_json to convert it to a Perl data structure. Alternatively, if you don't want to install JSON, Perl ships with JSON::PP, which is a drop-in replacement (or fall-back).

#!/usr/bin/env perl use strict; use warnings; use JSON qw(decode_json); my $json = do { local $/ = undef; <DATA>; }; my $data = decode_json($json); foreach my $element (@{$data->{'genres'}}) { print "id: $element->{'id'}, name: $element->{'name'}\n"; } __DATA__ { "genres": [ { "id": 28, "name": "Action" }, { "id": 12, "name": "Adventure" }, { "id": 16, "name": "Animation" }, { "id": 35, "name": "Comedy" }, { "id": 80, "name": "Crime" }, { "id": 99, "name": "Documentary" }, { "id": 18, "name": "Drama" }, { "id": 10751, "name": "Family" }, { "id": 14, "name": "Fantasy" }, { "id": 36, "name": "History" }, { "id": 27, "name": "Horror" }, { "id": 10402, "name": "Music" }, { "id": 9648, "name": "Mystery" }, { "id": 10749, "name": "Romance" }, { "id": 878, "name": "Science Fiction" }, { "id": 10770, "name": "TV Movie" }, { "id": 53, "name": "Thriller" }, { "id": 10752, "name": "War" }, { "id": 37, "name": "Western" } ] }

This produces:

id: 28, name: Action id: 12, name: Adventure id: 16, name: Animation id: 35, name: Comedy id: 80, name: Crime id: 99, name: Documentary id: 18, name: Drama id: 10751, name: Family id: 14, name: Fantasy id: 36, name: History id: 27, name: Horror id: 10402, name: Music id: 9648, name: Mystery id: 10749, name: Romance id: 878, name: Science Fiction id: 10770, name: TV Movie id: 53, name: Thriller id: 10752, name: War id: 37, name: Western

A foreach loop is useful here, as described in perlintro or perlsyn. Dealing with complex data structures is covered in Intermediate Perl (OReilly), in perlreftut, perlref, perldsc, and perllol.


Dave