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

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

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

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

Python 3.x

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

Q&A

解決済

3回答

3084閲覧

辞書型をJSONファイルとして保存したい

infinite

総合スコア3

JSON

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

Python 3.x

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

0グッド

0クリップ

投稿2021/08/03 09:33

前提・実現したいこと

初心者で勉強中です。
プログラムで出力したdict型のデータをjsonファイルとして保存させたいです。

発生している問題・エラーメッセージ

TypeError: keys must be str, int, float, bool or None, not tuple

該当のソースコード

python3.9

1detail = dict(zip(ab, cd)) 2 3import json 4with open("myDictionary.json", "w") as f: 5 json.dump(detail, f, sort_keys=True, ensure_ascii=False, indent=4)

試したこと

https://note.nkmk.me/python-json-load-dump/
上記のサイトを参考に該当のソースコードを記述しました。
エラー内容でkeysにstr型以外を指定していると出ています。
私の辞書"detail"の中身は複数の座標(a,b),(c,d)です。
例{(1765,250):(1809,125), ・・・, (1885, 82): (49, 37), (1814, 424): (57, 20)}
このデータをJSONファイルとして保存させる方法が知りたいです。

補足情報(FW/ツールのバージョンなど)

Python3.9
opencv_version = "4.5.3.56"
OS=Microsoft Windows [Version 10.0]

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

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

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

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

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

guest

回答3

0

keys must be str, int, float, bool or None, not tuple

の通りですが、(1765,250)のようなタプルはPythonの辞書型のキーには使えますが、JSON形式のキーとしては使えません。キーの型を考え直しましょう。

投稿2021/08/03 09:53

otn

総合スコア85901

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

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

infinite

2021/08/03 10:41

otn様ご回答ありがとうございます。 ()tupleがJSON形式として使えないのですね。 色々と調べ https://qiita.com/NoriakiOshita/items/6c2c11cab4411bd7f60c Pythonの配列や辞書をずっと使えるようにする小技 を参考にしpickleを使いファイルとして保存できました。
guest

0

ベストアンサー

回答になるかどうかはわかりませんが、

目的がPythonの辞書をファイルに保存して、別のPythonアプリから読み出して使いたい。
ということであり、Python以外の言語で読み出すことはないというのであれば、JSONではなくpickle --- Python オブジェクトの直列化を使うという方法もあります。

マニュアルを読んで使い方が分かりにくいなら、【Python】pickle モジュールを使用すると、オブジェクトをファイルに保存することができるのコードをコピペして試してみてください。

投稿2021/08/03 10:24

ppaul

総合スコア24670

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

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

infinite

2021/08/03 10:45

ppaul様ご回答ありがとうございます。 下の回答の返信に書きましたがppaul様と同様にpickleでファイル保存できました! 今のところPython以外の言語で読み出すことはないのでこちらの方法にします。また、マニュアルを読んで再度知識を深めます。
guest

0

JSON形式は()付きのキーに対応していないので、PICKLE形式で保存した。

書き出し

Python3.9

1import pickle 2with open("myDictionary.pkl", "wb") as f: 3 pickle.dump(detail, f)

読み込み

python3.9

1import pickle 2 3with open("myDictionary.pkl", "rb") as f: 4 detailtest = pickle.load(f) 5 6print(detailtest)

一応質問後自己解決したためこちらにコードを記載させていただきました。
その間にご回答いただいたotn様はエラーの原因、ppaul様は解決方法をより詳しく記載していただいております。ベストアンサーは同様の解決手段でありより詳細であったppaul様にします。そちらをご確認ください。
ありがとうございました。

投稿2021/08/03 10:53

編集2021/08/03 11:21
infinite

総合スコア3

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

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

otn

2021/08/03 11:00

ppaulさんの回答をベストアンサーにすべきでは?
infinite

2021/08/03 11:11

自己解決後質問していた事を忘れていました。 かしこまりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問