Json-Feld in Postgres wird aktualisiert

Das Abfragen von Postgres 9.3 von json field ist wirklich großartig. Allerdings konnte ich keine formale Möglichkeit finden, das JSON-Objekt zu aktualisieren, für das ich eine interne Funktion verwende, die in geschrieben wurdeplpythonu gestützt auf den vorherigen Beitrag (Wie ändere ich Felder im neuen PostgreSQL-JSON-Datentyp?):

CREATE OR REPLACE FUNCTION json_update(data json, key text, value json)
RETURNS json AS
$BODY$
   from json import loads, dumps
   if key is None: return data
   js = loads(data)
   js[key] = value
   return dumps(js)
$BODY$
LANGUAGE plpythonu VOLATILE

Es funktioniert wirklich gut, wenn meine json-Updates flach und einfach bleiben. Angenommen, "chat" ist ein json-Typ, der in der Tabelle "GO_SESSION" abgelegt ist und Folgendes enthält{"a": "1", "b": "2"}ändert sich der folgende Code'b' bewerten und "chatten" lassen{"a": "1", "b": "5"}

update "GO_SESSION" set chat=json_update(chat,'b','5') where id=3

Das Problem ist, wenn ich versuche, es zu versuchen'b' ein anderes Objekt anstelle eines einfachen Wertes:

update "GO_SESSION" set chat=json_update(chat,'b','{"name":"steve"}') where id=3

Das Ergebnis in der Datenbank ist'b' Enthält eine maskierte Zeichenfolge anstelle eines echten JSON-Objekts:

{"a": "1", "b": "{" name ":" steve "}

Ich habe verschiedene Möglichkeiten ausprobiert, meinen JSON zu entkommen oder zu löschen, um ein Objekt zu behalten, konnte aber keine Lösung finden.

Danke

Antworten auf die Frage(3)

Ihre Antwort auf die Frage