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
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.
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;
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