web-dev-qa-db-fra.com

Postgres: Comment convertir une chaîne json en texte?

La valeur Json peut consister en une valeur de piqûre. Par exemple.

postgres=# SELECT to_json('Some "text"'::TEXT);
     to_json
-----------------
 "Some \"text\""

Comment puis-je extraire cette chaîne en tant que valeur textuelle postgres?

::TEXT ne fonctionne pas. Il renvoie JSON entre guillemets, pas la chaîne d'origine:

postgres=# SELECT to_json('Some "text"'::TEXT)::TEXT;
     to_json
-----------------
 "Some \"text\""

Merci.

P.S. J'utilise PostgreSQL 9.3

63
e79ene

Dans PostgreSQL, il n’ya aucun moyen de déconstruire un objet JSON scalaire. Ainsi, comme vous le soulignez,

select  length(to_json('Some "text"'::TEXT) ::TEXT);

a 15 ans, 

L'astuce consiste à convertir le JSON en un tableau d'un élément JSON, puis à extraire cet élément à l'aide de ->>.

select length( array_to_json(array[to_json('Some "text"'::TEXT)])->>0 );

reviendra 11.

33

Dans 9.4.4, utiliser l'opérateur #>> fonctionne pour moi:

select to_json('test'::text) #>> '{}';

A utiliser avec une colonne de table:

select jsoncol #>> '{}' from mytable;
86
Ian Timothy

Un moyen facile de le faire:

SELECT  ('[' || to_json('Some "text"'::TEXT) || ']')::json ->> 0;

Il suffit de convertir la chaîne json en une liste json

0
Zhemin Zhou