postgres retour json à partir d'une fonction

J'ai appris à connaître que je peux utiliser row_to_json de retour json sortie

Par exemple
Si ma requête est:

select * from sample;

Je peux le réécrire comme suit pour le retour json de sortie:

select row_to_json(sample) from sample;

Mais une chose que je suis en train de réaliser est la même fonctionnalité dans la fonction.

Pour vous donner un exemple, ici, est la fonction de retour de la table:

CREATE FUNCTION find_val(val text) 
RETURNS SETOF sample AS
$$
BEGIN
RETURN QUERY
SELECT * FROM sample where $1 = ANY(col4);
END;
$$
LANGUAGE 'plpgsql';

Maintenant, au lieu de lignes, je tiens à revenir sortie JSON à partir de ma fonction. Comment puis-je le faire ?

Voici ce que j'ai essayé jusqu'à présent:

native=> CREATE FUNCTION find_val(val text) 
RETURNS SETOF sample AS
$$
BEGIN
RETURN QUERY
SELECT row_to_json(sample) FROM sample where $1 = ANY(col4) ; 
END;
$$
LANGUAGE 'plpgsql';
CREATE FUNCTION
native=> select find_val('yo');
ERROR:  structure of query does not match function result type
DETAIL:  Returned type json does not match expected type integer in column 1.
CONTEXT:  PL/pgSQL function find_val(text) line 3 at RETURN QUERY
native=> drop function find_val(text);
DROP FUNCTION



native=> CREATE FUNCTION find_val(val text) 
native-> RETURNS json AS
native-> $$
native$> BEGIN
native$> SELECT row_to_json(sample) FROM sample where $1 = ANY(col4);
native$> END;
native$> $$
native-> LANGUAGE 'plpgsql';
CREATE FUNCTION
native=> select find_val('yo');
ERROR:  query has no destination for result data
HINT:  If you want to discard the results of a SELECT, use PERFORM instead.
CONTEXT:  PL/pgSQL function find_val(text) line 3 at SQL statement
native=>