【发布时间】:2018-02-12 01:55:30
【问题描述】:
我已经编写了我的自定义 jsonencoder,如下所示;
from flask.json import JSONEncoder
from models.AtgSiteToPoll import *
class CustomJSONEncoder(JSONEncoder):
def default(self, obj):
if isinstance(obj, AtgSiteToPoll):
return obj.__dict__
return JSONEncoder.default(self, obj)
在我的主应用程序中,我将编码器设置如下;并尝试从数据库中返回对象列表。对于单个对象,我将编码器称为jsonEncoder.default(a) 但是如何将编码器用于对象列表(即:formatted_atgsites)?
from flask import Flask, jsonify, request
import httplib
app = Flask(__name__)
app.json_encoder = CustomJSONEncoder
def BuildATGSite(siteid):
jsonEncoder = CustomJSONEncoder()
atgsites=[]
if siteid is None :
atgsites = atgsitetopoll.query.all()
else :
atgsites = atgsitetopoll.query.filter_by(siteid=siteid).first()
formatted_atgsites=[]
a = AtgSiteToPoll()
if atgsites !=[] :
for atgs in atgsites:
formatted_atgsites.append({
a.SiteId = atgs.siteid
a.IPAddress = atgs.ipaddress
a.Port = atgs.port
a.Category = atgs.category
a.UserId = atgs.userid
a.Password = atgs.password
a.ReceiveTimeoutInMilliSeconds = atgs.receivetimeoutinmilliseconds })
else:
a.SiteId = '12345'
a.IPAddress = '10.10.10.10'
a.Port = 10001
a.Category = 1
a.UserId = 'testuser'
a.Password = 'testpassword'
a.ReceiveTimeoutInMilliSeconds = '60'
return jsonEncoder.default(a)
【问题讨论】:
-
稍微不相关的指针 - 我已经看到您在许多类中使用该编码器。您可以使用
isinstance(something, (SomeClass, AnotherClass, ...))使检查更容易。 -
@viraptor 谢谢我会更新它。并回答我原来的问题?