| From: | Hans Ginzel <hans(at)matfyz(dot)cz> |
|---|---|
| To: | psycopg(at)lists(dot)postgresql(dot)org |
| Subject: | Re: register_adapter Json with custom JSONEncoder |
| Date: | 2020-07-20 11:18:55 |
| Message-ID: | 20200720111854.GA63808@artax.karlin.mff.cuni.cz |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | psycopg |
On Mon, Jul 13, 2020 at 05:15:19PM +0100, Daniele Varrazzo wrote:
>You can use a partial function for instance, of the like of: `lambda
>obj: Json(obj, dumps=mydumps)`.
Thank you, Daniele.
I have (succesfully) tried
from psycopg2.extras import Json
from json import JSONEncoder
from bson import ObjectId
class JSONEncoder(JSONEncoder):
def default(self, o):
if isinstance(o, ObjectId):
return str(o)
return supper().default(self, o)
jsonEncoder = JSONEncoder()
#psycopg2.extensions.register_adapter(dict, Json)
psycopg2.extensions.register_adapter(dict, lambda o: Json(o, dumps=jsonEncoder.encode))
and variants like
import json
psycopg2.extensions.register_adapter(dict, lambda o: Json(o, dumps = lambda oo: json.dumps(oo, default=str)))
or
from bson import json_util
psycopg2.extensions.register_adapter(dict, lambda o: Json(o, dumps=json_util.dumps))
I choosed the first one because of cached Encoder and cleanest way.
Best regards,
Hans
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Daniele Varrazzo | 2020-09-07 00:12:52 | Psycopg 2.8.6 released |
| Previous Message | Daniele Varrazzo | 2020-07-13 16:15:19 | Re: register_adapter Json with custom JSONEncoder |