This workaround not works
CREATE FUNCTION json_array_castext(json) RETURNS text[] AS $f$
SELECT array_agg(x::text) FROM json_array_elements($1) t(x);
$f$ L
In my case it helped to have the result reflect 3 states, null, empty text array and non-empty text array depending on the input. Hopefully this will be useful to someone.
CREATE OR REPLACE FUNCTION json_array_text_array(JSON)
RETURNS TEXT [] AS $$
DECLARE
result TEXT [];
BEGIN
IF $1 ISNULL
THEN
result := NULL;
ELSEIF json_array_length($1) = 0
THEN
result := ARRAY [] :: TEXT [];
ELSE
SELECT array_agg(x) FROM json_array_elements_text($1) t(x) INTO result;
END IF;
RETURN result;
END;
$$
LANGUAGE plpgsql
IMMUTABLE
STRICT;