PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie kann man ein Json-Array in ein Text-Array umwandeln?

versuchen Sie json_array_elements_text anstelle von json_array_elements , und Sie brauchen keine explizite Umwandlung in Text (x::text ), sodass Sie Folgendes verwenden können:

CREATE or replace FUNCTION json_array_castext(json) RETURNS text[] AS $f$
    SELECT array_agg(x) FROM json_array_elements_text($1) t(x);
$f$ LANGUAGE sql IMMUTABLE;

Für Ihre zusätzliche Frage

Warum ist x::text kein Cast?

Dies wird umgewandelt und aus diesem Grund gibt es keinen Fehler, aber wenn Json-String in Text wie folgt umgewandelt wird:::text , postgres fügt dem Wert Anführungszeichen hinzu.

Nur zu Testzwecken können Sie Ihre Funktion wieder auf Original ändern (wie in Ihrer Frage) und versuchen:

SELECT  
(json_array_castext('["hello","world"]'))[1] = 'hello',
(json_array_castext('["hello","world"]'))[1],
'hello'

Wie Sie sehen, (json_array_castext('["hello","world"]'))[1] gibt "hello" statt hello . und deshalb haben Sie false erhalten beim Vergleich dieser Werte.