web-dev-qa-db-fra.com

Supprimer les guillemets doubles du retour d'une fonction dans PostgreSQL

J'ai la fonction suivante dans PostgreSQL

CREATE OR REPLACE FUNCTION public.translatejson(JSONB, TEXT)
RETURNS TEXT
AS
$BODY$
   SELECT ($1->$2)::TEXT
$BODY$
LANGUAGE sql STABLE;

Lorsque je l'exécute, je reçois les valeurs entourées de guillemets doubles. Par exemple:

SELECT id, translatejson("title", 'en-US') AS "tname" FROM types."FuelTypes";

en retour, je reçois une table comme celle-ci

-------------------
| id | tname      |
-------------------
| 1  | "gasoline" |
| 2  | "diesel"   |
-------------------

Les valeurs de la colonne 'title' sont au format JSON: {"en-US": "gasoline", "fr-FR": "essence"}. Comment puis-je omettre les guillemets doubles pour renvoyer uniquement la chaîne du résultat?

27
Leo

Le -> L'opérateur renvoie un résultat json. Le convertir en text le laisse dans une représentation json.

Le ->> L'opérateur renvoie un résultat text. Utilisez-le à la place.

test=> SELECT '{"car": "going"}'::jsonb -> 'car';
 ?column? 
----------
 "going"
(1 row)

test=> SELECT '{"car": "going"}'::jsonb ->> 'car';
 ?column? 
----------
 going
(1 row)
69
Craig Ringer