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