【Python】jsonファイルに保存するときに発生する、シリアライズ化できない問題を解決する方法

json形式にシリアライズ化できないエラーを解決する方法

こんにちは、にわこまです。

今回は、pythonのライブラリの1つであるjsonを使って、データをファイルに保存するときに発生するエラーを解決します。シリアライズ化できないというエラーです。具体的には以下のようなエラーを解決します。「TypeError: Object of type クラス名is not JSON serializable」。

 

誤字脱字や何かございましたらご連絡お願いいたします。

 

 

スポンサードサーチ


「TypeError: Object of type クラス名 is not JSON serializable」を解決する方法

数値または文字列に変更する

 

詳しく解説していきます。

原因は、代入されているデータがシリアライズ化できない型であるということです。ゆえに、解決方法は、シリアライズ化できる数値(int型など)または文字列(string型)に変更するということです。

 

 

ここからは例を示します。

以下のようなプログラムを作成しました。代入した文字列を逆から表示するクラスです。

import json

class Sentence:
    def __init__(self, text):
        self.text = text
        self.reversed_text = ""
        self.reverseText()
    def reverseText(self):
        for s in reversed(self.text):
            self.reversed_text += s
    def __str__(self):
        return self.reversed_text
    pass

l = [Sentence("りんご"), Sentence("ぶどう"), Sentence("グレープフルーツ")]
for i in l:
    print(i)

 

以下に実行結果を示します。

ごんり
うどぶ
ツールフプーレグ

 

上記の実行結果で表示された文字列をjson形式で保存するとします。

以下にエラーが発生するソースコードを示します。

import json

class Sentence:
    def __init__(self, text):
        self.text = text
        self.reversed_text = ""
        self.reverseText()
    def reverseText(self):
        for s in reversed(self.text):
            self.reversed_text += s
    def __str__(self):
        return self.reversed_text
    pass

l = [Sentence("りんご"), Sentence("ぶどう"), Sentence("グレープフルーツ")]

# エラーが発生する方法
d = {"reversed_sentence" : l}
path = "json_error01.json"
with open(path, encoding="utf-8", mode="w") as f:
    json.dump(d, f, indent=2, ensure_ascii=False)

 

以下のようなエラーが発生します。「TypeError: Object of type Sentence is not JSON serializable」。「Sentence」の部分は人それぞれ異なると思います。上記のコードを実行した場合は「Sentence」になります。

上記のコードでエラーが発生する原因は、リストの要素がSentenceオブジェクトであるということです。このリストの要素を文字列に変えることでエラーを解決することができます。

 

以下にエラーが発生しないソースコードを示します。

import json

class Sentence:
    def __init__(self, text):
        self.text = text
        self.reversed_text = ""
        self.reverseText()
    def reverseText(self):
        for s in reversed(self.text):
            self.reversed_text += s
    def __str__(self):
        return self.reversed_text
    pass

l = [Sentence("りんご"), Sentence("ぶどう"), Sentence("グレープフルーツ")]

# エラーが発生しない方法
l = [s.reversed_text for s in l]
d = {"reversed_sentence" : l}
path = "json_error02.json"
with open(path, encoding="utf-8", mode="w") as f:
    json.dump(d, f, indent=2, ensure_ascii=False)

 

上記のプログラムを実行すると「json_error02.json」というファイルが生成されます。ファイルには以下のように記述されています。

{
  "reversed_sentence": [
    "ごんり",
    "うどぶ",
    "ツールフプーレグ"
  ]
}

 

 

まとめ

今回は、pythonでjsonライブラリを使って、json形式に保存するときに発生するエラーを解決する方法を紹介しました。

エラーが発生する原因は、シリアライズ化できないデータの型であるということです。つまり、jsonファイルに保存することが出来ない型であるということです。

解決方法は、数値(int型など)または文字列(string型)に変換するということです。

 

 

最後までお読みいただきありがとうございました。


スポンサードサーチ