def default(self, obj):
if isinstance(obj.__class__, DeclarativeMeta):
# an SQLAlchemy class
fields = {}
for field in [x for x in dir(obj) if not x.startswith('_')
and x != 'metadata' and x != '_sa_instance_state']:
data = obj.__getattribute__(field)
if isinstance(data, types.MethodType):
continue
try:
json.dumps(data) # this will fail on non-encodable values, like other classes
fields[field] = data
except TypeError:
try:
fields[field] = [str(d) for d in data]
except:
fields[field] = None
except UnicodeEncodeError:
fields[field] = 'Non-encodable'
# a json-encodable dict
return fields
return json.JSONEncoder.default(self, obj)
评论列表
文章目录