use warnings; use strict; use JSON::MaybeXS; my $rows = [["val1"],["val2"]]; my $rows_a = [[],["val2","val3"]]; my $return; $return->{'key1'} = [join(', ', map { $_->[0] } @$rows)]; $return->{'key2'} = [map { $_->[0] } @$rows]; $return->{'key3'} = [map { @$_ } @$rows]; $return->{'key2_a'} = [map { $_->[0] } @$rows_a]; $return->{'key3_a'} = [map { @$_ } @$rows_a]; print encode_json($return), "\n"; __END__ { "key1":["val1, val2"], "key2":["val1","val2"], "key3":["val1","val2"], "key2_a":[null,"val2"], "key3_a":["val2","val3"] }