我是Flask的新手,我在尝试将包含另一个对象实例的对象作为字段返回时遇到了一些问题,如下所示:
class Park(object):
park_id = 0
address = ""
services = []
position = None
def __init__(self, park_id, address, services, latitude, longitude):
self.park_id = park_id
self.address = address
self.services = services
self.position = Point(latitude, longitude)
其中Point类只是以下内容:
class Point(object):
latitude = None
longitude = None
def __init__(self, latitude, longitude):
self.latitude = latitude
self.longitude = longitude
当我尝试返回Park实例时
@app.route('/')
def test():
park = Park(....)
return jsonify(park])
我收到此错误:TypeError: Object of type 'Park' is not JSON serializable
。
答案 0 :(得分:0)
默认情况下,Python的默认json模块不会序列化复杂对象。
您可以使用jsonpickle等库;或者只是在Park
类中实施jsonify(park.to_dict())
方法,将对象转换为字典,这样就可以调用IF(
(AND(H11<>"",L11<>""),
"Both",
IF(
AND(H11<>"",L11=""),
"First",
IF(
AND(H11="",L11<>""),
"Second",
"none"
)
)
)
。
答案 1 :(得分:0)
我认为Willem是对的,因为您首先需要将您的类转换为类似JSON的对象,例如using AdoNetCore.AseClient;
。如果您只想转换dict
类的属性,可以使用Point
特殊属性或内置__dict__
。
以下是使用vars()
转换的快速功能。请注意,我已经对其进行了硬编码以检查vars
类,但这可以很容易地扩展为更通用。这也只检查一个级别,但可以根据需要写入递归。您还可以将此函数转换为Point
类本身的方法,以将所有内容保持在一起/更面向对象。
Park
):
详细了解def convert_park_to_dict(park):
park_dict = {}
for attr in vars(park):
attr_value = getattr(park, attr)
if isinstance(attr_value, Point):
point_dict = vars(attr_value)
park_dict[attr] = point_dict
else:
park_dict[attr] = attr_value
return park_dict
@app.route('/')
def test():
park = Park(1, 'my_house', ['swings', 'shop'], 50, 60)
park_dict = convert_park_to_dict(park)
return jsonify(park_dict)
here。