如何使用Flask

时间:2018-01-29 21:58:11

标签: python json flask

我是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

2 个答案:

答案 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