【Python】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型)に変換するということです。
最後までお読みいただきありがとうございました。
スポンサードサーチ