Der Json-Wert kann aus einem Zeichenfolgenwert 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 json in Anführungszeichen zurückgegeben, nicht die ursprüngliche Zeichenfolge:
postgres=# SELECT to_json('Some "text"'::TEXT)::TEXT;
to_json
-----------------
"Some \"text\""
Vielen Dank.
PS Ich benutze PostgreSQL 9.3
json
postgresql
e79ene
quelle
quelle
Antworten:
In PostgreSQL gibt es keine Möglichkeit, ein skalares JSON-Objekt zu dekonstruieren. Wie Sie hervorheben,
ist 15,
Der Trick besteht darin, den JSON in ein Array aus einem JSON-Element zu konvertieren und dieses Element dann mit zu extrahieren
->>
.wird 11 zurückgeben.
quelle
json_extract_path_text()
das Root-Element (AFAIK) nicht referenziert werden kann.from_json
vorgeschlagen, aber nicht implementiert wurde. wiki.postgresql.org/wiki/JSON_API_BrainstormIn 9.4.4 funktioniert die Verwendung des
#>>
Operators für mich:So verwenden Sie eine Tabellenspalte:
quelle
to_json(...)
ist einfach eine einfache Möglichkeit, einen JSON-Wert zu erstellen, mit dem als Beispiel in einer kurzen einzeiligen Anweisung gearbeitet werden kann. Sicherlich würden Sie es durch den Namen einer JSON-Spalte ersetzen, wenn Sie eine Tabelle wie beschrieben abfragen würden. Um einen Punkt möglicher Verwirrung zu beseitigen, ist Ihre Besetzung(...)::text
überflüssig, da der#>>
Operator per Definition Text zurückgibt (und der Grund dafür ist, den Operator überhaupt zu verwenden). Sie könnten die Klammern behalten, aber die Besetzung fallen lassen::text
.#>>
und'{}'
tun? Ich kann dem nicht ganz folgen und keiner der Begriffe ist Google-freundlich. Diese Antwort hat mein Problem behoben, ich möchte nur wissen warum.#>>
Bediener finden Sie hier .text
. Es mag wie eine Zeichenfolge aussehen, ist aber ein JSON-Objekt. Verwenden Sie den#>>
Operator, um dieses Objekt von JSON in Text zu konvertieren . Für diesen Operator müssen Sie jedoch einen Pfad angeben. Der Pfad zu diesem Stammobjekt lautet{}
. BedeutetSELECT '"test"'::jsonb #>> '{}'
also "Holen Sie sich das Objekt in den Stammpfad und konvertieren Sie es in Text".Mr. Curious war auch neugierig darauf. Zusätzlich zum
#>> '{}'
Operator kann man in 9.6+ mit dem->>
Operator den Wert einer jsonb-Zeichenfolge abrufen :Wenn man einen json-Wert hat, besteht die Lösung darin, zuerst in jsonb umzuwandeln:
quelle
- >> arbeitet für mich.
postgres version:
Abfrage:
Ausgabe:
quelle
Ein einfacher Weg, dies zu tun:
Konvertieren Sie einfach den JSON-String in eine JSON-Liste
quelle