質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

1回答

1527閲覧

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

hujio362

総合スコア5

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2022/01/15 02:26

dict型のオブジェクトvalueに対して
body = dumps(value)をした所、

TypeError: Object of type LazyString is not JSON serializable

というエラーが返ってきました。

  1. LasyStringとはどういった型でしょうか?(調べましたがいまいち情報がなく)
  2. valueのタイプはdictになっていても、このエラーはなぜ発生するのでしょうか。

前提知識として、こちらの記事を読んでいます。
https://rurukblog.com/post/python-json-dumps-error/


python3.8

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

melian

2022/01/15 02:57

"Object of type LazyString ..." と表示されていますので、value は dict 型ではなく LazyString クラスのインスタンスなのだと思われます。具体的にどの様にして value インスタンスを作成したのでしょうか? 一応、lazy-string · PyPI https://pypi.org/project/lazy-string/ というパッケージが存在します。
guest

回答1

0

  • LasyStringとはどういった型でしょうか?(調べましたがいまいち情報がなく)

lazy-string に以下のように書かれています。

The package provides a LazyString class. Its constructor accepts a callable (say, a function) which will be called when string's value is needed. The constructor also allows to specify positional and keyword arguments for that callable:

The value is re-evaluated on every access.

例えば、以下のようなすることをライブラリです。

python

1>>> from lazy_string import LazyString 2>>> 3>>> x = {'a': LazyString(lambda: f'number_{X}')} 4>>> 5>>> X = 10 6>>> print(x['a']) 7number_10 8>>> X=42 9>>> print(x['a']) 10number_42
  • valueのタイプはdictになっていても、このエラーはなぜ発生するのでしょうか。

dictのようなコンテナオブジェクトについては、そこに再帰的に格納されているすべてのオブジェクトがJSON serializableでなければdumpsすることができないからです。

投稿2022/01/15 08:58

ppaul

総合スコア24666

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問