【问题标题】:Flask and handeling a Zeep response with datetime烧瓶并使用日期时间处理 Zeep 响应
【发布时间】:2020-01-27 16:08:48
【问题描述】:

我正在使用Zeep 调用一个SOAP WebService,它返回一个带有datetime 对象的类似JSON 的响应。我想使用Flask 编写一个微服务并返回正确的 JSON 响应。然而,Flask 抱怨说:

TypeError: Object of type datetime is not JSON serializable
from flask import Flask
from flask_restful import Resource, Api
import datetime

app = Flask(__name__)
api = Api(app)

class foo(Resource):
    def get(self, x):
        zeepResponse = {
            'Response': {
                'Number': x,
                'DateTime': datetime.datetime(2020, 1, 1, 0, 0, 0),
                'Other': None
            }
        }
        return zeepResponse

api.add_resource(foo, '/post/<int:x>')

if __name__ == '__main__':
    app.run(debug=True)

要从命令行进行测试,只需运行:

% curl http://localhost:5000/post/911

您能指导我如何将zeepResponse(特别是datetime)转换为正确的JSON 可序列化结构吗?

【问题讨论】:

  • JSON 没有日期时间类型...
  • @thebjorn 好的。然后,Zeep 返回类似 JSON 的结构。如何将其转换为正确的 JSON?谢谢!
  • 没有“类 JSON 结构”之类的东西,要么是 JSON 数据(即 utf-8 编码的字符串),要么是可由特定 json 序列化器序列化的 JSON 数据。您正在使用的序列化程序,至少在您使用它的配置中,不考虑 datetimes json 可序列化(因为,datetime 不是 JSON 定义中定义的类型之一)。 想要如何序列化日期时间完全取决于你如何设计你的 api。 ISO 8601 格式的 UTC 总是一个不错的选择,也许可以试试……?

标签: python web-services flask flask-restful zeep


【解决方案1】:

致电json.dumps(zeepResponse, default=str) 似乎可以解决我的问题。来自Stack Overflow 11875770

from flask import Flask
from flask_restful import Resource, Api
import datetime
import json

app = Flask(__name__)
api = Api(app)

class foo(Resource):
    def get(self, x):
        zeepResponse = {
            'Response': {
                'Number': x,
                'DateTime': datetime.datetime(2020, 1, 1, 0, 0, 0),
                'Other': None
            }
        }
        return json.loads(json.dumps(zeepResponse, default=str))

api.add_resource(foo, '/post/<int:x>')

if __name__ == '__main__':
    app.run(debug=True)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-17
    • 2019-06-17
    • 2018-08-17
    • 2012-03-03
    • 2017-12-04
    • 1970-01-01
    • 2022-10-13
    相关资源
    最近更新 更多