課題
DeePLのAPIを使って英訳し、その結果を使って他のAPIを呼び出そうとしていました。
しかしDeePLの英訳結果を文字列として受け取れてないことが原因で、以下のようなエラーが出てしまいました。
--> 179 raise TypeError(f'Object of type {o.__class__.__name__} '
180 f'is not JSON serializable')
181
TypeError: Object of type TextResult is not JSON serializable
DeePLの英訳結果を文字列として受け取るための方法を探すのに苦労したので、共有させていただきます。
またこれは、翻訳結果を文字列として受け取る際にも使える方法なので、参考にしていただけると幸いです。
結論
英訳結果に、「.text」メソッドを使用する
解決する前のコード
出力結果より、英訳の結果を入れたtranslation_resultsのタイプが、
<class 'deepl.translator.TextResult'>
になっている事が分かります。
# deepLの認証コードと設定
deepL_auth_key = "ご自身のAPIキー"
translator = deepl.Translator(deepL_auth_key)
#英訳するもののリストを用意
result =[ "私は今日も、元気です。","おはよう"]
#リスト型からひとつずつ取得して、それぞれを英訳し、文字列型として取得する
for i in result:
# EN-USに翻訳
translation_results = translator.translate_text(
i, target_lang="EN-US")
print(translation_results)
print("型のタイプは、")
print(type(translation_results))
print("-----------------")
I am fine today, too.
型のタイプは、
<class 'deepl.translator.TextResult'>
-----------------
Good morning.
型のタイプは、
<class 'deepl.translator.TextResult'>
-----------------
解決した後のコード
英訳の結果を入れたtranslation_resultsに.textを追加しました。
これにより、英訳した結果が<class 'str'>
のように、文字列(str)型として受け取れています。
# deepLの認証コードと設定
deepL_auth_key = "ご自身のAPIキー"
translator = deepl.Translator(deepL_auth_key)
#英訳するもののリストを用意
result =[ "私は今日も、元気です。","おはよう"]
#リスト型からひとつずつ取得して、それぞれを英訳し、文字列型として取得する
for i in result:
# EN-USに翻訳
translation_results = translator.translate_text(
i, target_lang="EN-US")
print(translation_results.text)
print("型のタイプは、")
print(type(translation_results.text))
print("-----------------")
I am fine today, too.
型のタイプは、
<class 'str'>
-----------------
Good morning.
型のタイプは、
<class 'str'>
-----------------
参考にしたサイト
BeautifulSoupでスクレイピング。データをJsonに出力すると「TypeError: Object of type Tag is not JSON serializable」
最後に
TypeError: Object of type TextResult is not JSON serializable
のエラーが出てしまった際には、「.textメソッドを使って、文字列として受け取れるようにしてみる」というのをお試し下さい!
最後までお読みいただき、ありがとうございました!