2021.05.27  

【Python】 json.dumpsのエラー対処: object of type is not json serializable

Python    



Pythonで json.dumps を実行した際に発生する、次のエラーの対処法について紹介します。

  1. TypeError: Object of type set is not JSON serializable
  2. TypeError: Object of type datetime is not JSON serializable
  3. TypeError: dump() missing 1 required positional argument: 'fp'
  4. raise TypeError(f'Object of type {o.__class__.__name__} '
    TypeError: Object of type クラス名 is not JSON serializable

前提知識

基本型(str、int、float、bool、None)については問題なくシリアライズ(json.dumps)することができます。

すなわち、次のコードの json.dumpsは正常に実行されます。

json_data = json.dumps({'one': 1, 'tow': 2.1, 'three': False, 'for': None})

マニュアル: JSON エンコーダおよびデコーダ

パターン1:set(集合型)を使用した場合

こちらは以下のパターンのエラーが発生した時の解決方法です。

TypeError: Object of type set is not JSON serializable

下記はエラーが発生したソースコードです。

import json
data = {"aaa", 2}
json_data = json.dumps(data)

理由は単純で、エラー文の通り「setオブジェクトはJSONにできないよ」という話です。

dict型にしたつもりが、set型になっていたというパターンです。

import json
data = {"aaa", 2}  # 修正前
data = {"aaa": 2}  # 修正後
json_data = json.dumps(data)

{ } をカンマ( , )で区切るとset型となり、コロン( : )で区切ると辞書型になります。

ぱっとみだとわからないので、「あれ?」っとなりますが、気がつけばすぐに解決するエラーです。

パターン2:datetime(時刻)を設定した場合

こちらは以下のパターンのエラーが発生した時の解決方法です。

TypeError: Object of type datetime is not JSON serializable

下記はエラーが発生したソースコードです。

import json
import datetime
dt_now = datetime.datetime.now()
data = {"aaa": dt_now}
json_data = json.dumps(data)

原因はdatetimeに対して、 json.dumpsは使えないというものです。

したがって、次のようにdatetimeを文字列型に変換すればエラーとなりません。

import json
import datetime
dt_now = str(datetime.datetime.now())  # datetimeを文字列に変換
data = {"aaa": dt_now}
json_data = json.dumps(data)

パターン3:構文が間違っているパターン

こちらは以下のパターンのエラーが発生した時の解決方法です。

TypeError: dump() missing 1 required positional argument: 'fp'

下記はエラーが発生したソースコードです。

json_data = json.dump({'one': 1, 'tow': 2.1, 'three': False, 'for': None})

こちらは「 json.dumps」とすべきところを「json.dump」と記述してしまっているせいで発生しているエラーです。

次のようにdumpの後ろにsをつければエラーとなりません。

json_data = json.dumps({'one': 1, 'tow': 2.1, 'three': False, 'for': None})

パターン4:インスタンスをjson.dumpsしているパターン

こちらは以下のパターンのエラーが発生した時の解決方法です。

raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type data_class is not JSON serializable

下記はエラーが発生したソースコードです。

import json

class data_class(object):
    def __init__(self):
        self.x = 1
        self.y = 2

data = data_class()
json_data = json.dumps(data)

インスタンスは通常、json.dumpsできないためエラーとなっています。

このインスタンスのデータをjson.dumpsしたい場合は、ソースコードの最終行を以下のように書き換えます。

json_data = json.dumps(data.__dict__)
print(json_data)
# {"x": 1, "y": 2}

特殊属性である「__dict__」をオブジェクトに使用すると、

そのオブジェクトのアトリビュート(変数や配列などのメソッドではないもの)を辞書型にして返してくれます。マニュアル: 特殊属性

参考
https://qiita.com/kazetof/items/751be29f208836cf9bf4

コメント
@ppu-prof_Si
2024年1月28日19:44
Наша бригада искусных специалистов предоставлена предложить вам инновационные системы утепления, которые не только предоставят долговечную безопасность от прохлады, но и преподнесут вашему зданию трендовый вид.
Мы функционируем с современными строительными материалами, гарантируя прочный период использования и прекрасные результаты. Теплоизоляция облицовки – это не только экономия на обогреве, но и забота о природной среде. Энергоэффективные технологические решения, которые мы претворяем в жизнь, способствуют не только твоему, но и сохранению экосистемы.
Самое основное: <a href=https://ppu-prof.ru/>Отделка фасада с утеплением цена</a> у нас стартует всего от 1250 рублей за м2! Это доступное решение, которо
@ppu-prof_Si
2024年1月31日1:26
Наша бригада опытных специалистов находится в готовности выдвинуть вам актуальные приемы, которые не только гарантируют надежную протекцию от холода, но и дарят вашему коттеджу модный вид.
Мы деятельны с современными компонентами, обеспечивая долгосрочный срок работы и прекрасные итоги. Изолирование облицовки – это не только экономия энергии на обогреве, но и внимание о экосистеме. Энергоспасающие подходы, которые мы применяем, способствуют не только личному, но и сохранению природной среды.
Самое основополагающее: <a href=https://ppu-prof.ru/>Утепление стен дома снаружи цена</a> у нас составляет всего от 1250 рублей за м²! Это доступное решение, которое преобразит ваш домик в настоящий уютный местечко с неболь&
@Casinosmab
2025年2月21日21:28

You definitely made your point.
casino online streaming https://hotgamblingguide.com/reviews/ all that glitters casino game online
@SidneyHot
2025年2月23日16:40
You reported that terrifically!
new 2021 online casino real money https://combatcasino.info/online-casino-games/ gta online casino time trial
@SidneyHot
2025年2月26日0:24

Effectively expressed indeed! !
online casino games canada https://combatcasino.info/review-cafe/ pharaohs casino online
@SidneyHot
2025年2月28日3:13

Thanks a lot. I value it!
real money casino online usa https://combatcasino.info/games/ panda master casino play online free play
@SidneyHot
2025年2月28日21:22

Nicely put, Thanks a lot!
top 10 online casinos in the world https://combatcasino.info/horse-betting/ australia casino online
@ArtisanSpaky
2025年11月2日21:05
Создавайте с душой, и ваши вещи будут жить дольше вас https://artisanalcrafts.ru/
@ArtisanSpaky
2025年11月3日7:36
Ручная работа - это когда вы чувствуете каждую деталь своими руками https://artisanalcrafts.ru/
@MetabolicFreedomCax
2025年11月3日23:55
Reboot your body's fat-burning ability with a strategic, 30-day metabolic reset plan. https://metabolicfreedom.top/ metabolic freedom by ben azadi pdf
@LaTeoriaLetThemOdoca
2025年11月4日7:38
El poder de Let Them esta en su simplicidad: deja que otros vivan sus vidas y tu vive la tuya. https://lateorialetthem.top/ la teorГ­a let them. la clave estГЎ en soltar
@MetabolicFreedomCax
2025年11月4日9:16
Tired of yo-yo dieting? Metabolic Freedom offers a clear path to lasting energy, weight control, and vitality. https://metabolicfreedom.top/ metabolic freedom book author
@MetabolicFreedomCax
2025年11月4日16:28
Metabolic Freedom offers a compassionate, effective path out of chronic dieting and into health. https://metabolicfreedom.top/ metabolize to freedom
@LaTeoriaLetThemOdoca
2025年11月5日1:38
Tu bienestar empieza cuando dejas de asumir la responsabilidad emocional de los demas. Vive libre. https://lateorialetthem.top/ the let them.theory
@LaTeoriaLetThemOdoca
2025年11月5日10:34
No necesitas complacer a todos. Solo necesitas respetarte a ti mismo. Tu paz depende de eso. https://lateorialetthem.top/ mel robbins let them theory pdf free download
@LaTeoriaLetThemOdoca
2025年11月5日17:19
Tu tiempo es valioso. No lo gastes en tratar de cambiar a quienes no quieren cambiar. https://lateorialetthem.top/ the let them theory libro en espaГ±ol
@LaTeoriaLetThemOdoca
2025年11月5日19:31
Suelta lo que no puedes cambiar. Tu energia merece usarse en construir tu mejor version. https://lateorialetthem.top/ let them theory libro
@LaTeoriaLetThemOdoca
2025年11月5日21:49
Tu vida mejora cuando dejas de justificarte ante quienes no entienden tu camino. Solo vive. https://lateorialetthem.top/ mel robbins let them theory pdf free
コメントする
コメント入力

名前 (※ 必須)

メールアドレス (※ 必須 画面には表示されません)

送信