in reply to How can I convert this raw data to a hash?
use JSON; use Data::Dumper; use strict; use warnings; my $json = JSON->new->allow_nonref; my $raw = do { undef $/; <DATA> }; my $ds = $json->decode( $raw ); if(0) { # this replaces the value of 'genres' with a hash more like what you w +ant: for my $key ( keys %$ds ) # e.g. 'genres' { my %h; for my $r ( @{ $ds->{$key} } ) { $h{$r->{'id'}} = $r->{'name'}; } $ds->{$key} = \%h; # replace it! } print Dumper $ds; } # or if you really want to 'invert' the hash, so that 'id's are at the + top: my %data; for my $key ( keys %$ds ) # e.g. 'genres' { my %h; for my $r ( @{ $ds->{$key} } ) { $data{$r->{'id'}}{$key} = $r->{'name'}; } } print Dumper \%data; __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" } ] }
|
---|