8
6

More than 5 years have passed since last update.

【Django】DjangoJSONEncoderを使おう

Posted at

はじめに

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にエンコードされた形で取得することができる

参考リンク

Serializing Django objects | Django documentation | Django

8
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
6