はじめに
nana musicでサーバサイドエンジニアをやっている@xKxAxKxです
この記事はnana music Advent Calendar 2018の25日目の記事です
最終日だけど、時間無いので小ネタです
DjangoJSONEncoderを使おう
Django REST frameworkでAPIを作るとき、レスポンスは大抵JSON形式でクライアントに返していると思う
その場合、基本的にSerializerを使って、レスポンスデータを返していることが多いと思うので、あんまり意識することがないと思うが、実はdatetimeなどは json.dumps()
でjson形式にエンコードすることができない
import json
import datetime
data = { 'datetime': datetime.datetime.now() }
json.dumps(data)
このようにやってしまうと、 TypeError: Object of type 'datetime' is not JSON serializable
といったエラーが発生する
しかし、 DjangoJSONEncoder
を使用すると、datetimeなども含めてエンコードしてくれる
import json
import datetime
from django.core.serializers.json import DjangoJSONEncoder
data = { 'datetime': datetime.datetime.now()}
json.dumps(data, cls=DjangoJSONEncoder)
このようにすると、返り値として '{"datetime": "2018-12-25T07:02:06.223"}'
といったJSONにエンコードされた形で取得することができる