my $DATA = { "required": [ { "docs": [ { "sec": "123A", "number": "1" } ], "name": "Mary Lou" }, { "docs": [ { "sec": "4567", "number": "1" } ], "name": "John De" }, { "docs": [ { "sec": "8763", "number": "1" } ], "name": "Smith Doe" }, { "docs": [ { "sec": "123B", "number": "1" } ], "name": "Joe De" } ], }; ... for my $dta ( @{ $DATA->{ required } || [] } ){ # if the docs is true if( scalar @{ $dta->{ docs } } ){ for my $doc_data ( @{ $dta->{ docs } || [] } ){ if( $doc_data->{'sec'} ) { # Get sec - number and name } } }else { warn "NO: $doc_data->{'sec'} | $doc_data->{'number'} \n"; # Get sec - numnber and name } } ... #### "sec": "123A", "number": "1" "name": "Mary Lou" "sec": "4567", "number": "1" "name": "John De" "sec": "8763", "number": "1" "name": "Smith Doe" "sec": "123B", "number": "1" "name": "Joe De" #### "sec": "123A", "number": "1" "name": "Mary Lou" "sec": "4567", "number": "1" "name": "John De" "sec": "8763", "number": "1" "name": "Smith Doe" "sec": "123B", "number": "1" "name": "Joe De" "sec": "123A", "number": "1" "name": "Mary Lou" "sec": "4567", "number": "1" "name": "John De" "sec": "8763", "number": "1" "name": "Smith Doe" "sec": "123B", "number": "1" "name": "Joe De"