How to cast json array to text array?

前端 未结 5 1153
隐瞒了意图╮
隐瞒了意图╮ 2020-12-20 20:28

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         


        
5条回答
  •  攒了一身酷
    2020-12-20 20:48

    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;
    

提交回复
热议问题