Ваша большая проблема в том, что $json
является объектом кодировщика JSON, а не структурой данных, которая должна быть закодирована. Вы должны создать отдельную структуру данных.
Ваша другая проблема заключается в том, что вы пытаетесь дважды кодировать свой JSON. Этот код:
my $data; # I've added this to fix your first bug
$data->{"users"} = $json->encode(\%user_result);
$data->{"owners"} = $json->encode(\%owner_result);
$json_string = to_json($data);
создаст строку JSON, которая при декодировании даст вам хеш с двумя ключами. Значением каждого ключа будет строка, содержащая JSON-кодированный хэш. Для каждого значения больше смысла быть хешем.
Итак, попробуйте это:
my $json_string = $json->encode({
users => \%user_result,
owners => \%owner_result,
});
Здесь я использую анонимный hashref, потому что нет необходимости указывать хэш для кодирования имени. Мы используем его только один раз.