it-swarm.com.de

Postgres: Wie konvertiert man Json-String in Text?

Json-Wert kann aus einem Stichwert bestehen. Z.B.

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

Wie kann ich diese Zeichenfolge als Postgres-Textwert extrahieren?

::TEXT funktioniert nicht. Es wird zitiert json zurückgegeben, nicht die Originalzeichenfolge:

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

Vielen Dank.

P.S. Ich verwende PostgreSQL 9.3

63
e79ene

In PostgreSQL gibt es keine Möglichkeit, ein Skalar-JSON-Objekt zu dekonstruieren. Wie Sie darauf hinweisen,

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

ist 15 

Der Trick besteht darin, die JSON in ein Array eines JSON-Elements zu konvertieren und dieses Element dann mit ->> zu extrahieren.

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

wird 11 zurückkehren.

33

In 9.4.4 arbeitet der Operator #>> für mich:

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

So verwenden Sie eine Tabellenspalte:

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

Ein einfacher Weg, dies zu tun:

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

Konvertieren Sie einfach den Json-String in eine Json-Liste

0
Zhemin Zhou