datetime.datetime は JSON シリアル化できません [重複] 質問する

datetime.datetime は JSON シリアル化できません [重複] 質問する

テーブル内のすべての列を取得し、このデータを含む JSON を返す Python クラスがあります。

問題は、これらの列の少なくとも 1 つが datetime であり、有効な JSON を生成するために列をシリアル化する方法を理解していないことです。

私のクラスは次のとおりです。

class GetTodos(Resource):
    def get(self):
        con = cx_Oracle.connect('brunojs/[email protected]/orcl')
        cur = con.cursor()
        cur.execute("select * from organite_repository")
        r = [dict((cur.description[i][0], value) \
                for i, value in enumerate(row)) for row in cur.fetchall()]
        cur.connection.close()
        return (r[0] if r else None) if None else r 

これについて何かヒントはありますか?

ベストアンサー1

JSON にはデフォルトの datetime 型がないため、Python はこれを自動的に処理できません。そのため、何らかの方法で datetime を文字列にする必要があります。最善の方法は、json モジュールを支援するカスタム ハンドラーを作成することだと思います。

import datetime
import json

def datetime_handler(x):
    if isinstance(x, datetime.datetime):
        return x.isoformat()
    raise TypeError("Unknown type")

json.dumps(data, default=datetime_handler)

おすすめ記事