Re: register_adapter Json with custom JSONEncoder

Поиск
Список
Период
Сортировка
От Hans Ginzel
Тема Re: register_adapter Json with custom JSONEncoder
Дата
Msg-id 20200720111854.GA63808@artax.karlin.mff.cuni.cz
обсуждение исходный текст
Ответ на Re: register_adapter Json with custom JSONEncoder  (Daniele Varrazzo <daniele.varrazzo@gmail.com>)
Список 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



В списке psycopg по дате отправления:

Предыдущее
От: Daniele Varrazzo
Дата:
Сообщение: Re: register_adapter Json with custom JSONEncoder
Следующее
От: Daniele Varrazzo
Дата:
Сообщение: Psycopg 2.8.6 released