Flask и обработка ответа Zeep с указанием даты и времени - PullRequest
0 голосов
/ 26 января 2020

Я вызываю SOAP WebService, используя Zeep , и он возвращает JSON -подобный ответ с datetime объектом. Я хочу написать микро-сервис, используя 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 сериализуемой структуры?

1 Ответ

1 голос
/ 27 января 2020

Вызов json.dumps(zeepResponse, default=str), кажется, решает мою проблему. От Переполнение стека 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)
...