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
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.
In 9.4.4 arbeitet der Operator #>>
für mich:
select to_json('test'::text) #>> '{}';
So verwenden Sie eine Tabellenspalte:
select jsoncol #>> '{}' from mytable;
Ein einfacher Weg, dies zu tun:
SELECT ('[' || to_json('Some "text"'::TEXT) || ']')::json ->> 0;
Konvertieren Sie einfach den Json-String in eine Json-Liste