Pythonで文字列になったJSONデータを辞書型にする方法

PythonでJSONファイルの辞書型データをread関数で読み込むと、すべてのデータが1つの文字列になってしまったので、それを辞書型データとして扱えるようにする方法について紹介します。

※read関数はテキストファイルの文字列を読み込む関数です。



目次

・JSONデータが文字列になった原因

・JSONファイルの様子

・文字列を辞書型データにするプログラム


辞書型データをJSONファイルに書き込むプログラム

JSONデータが文字列になった原因

JSONファイルのデータが1つの文字列になった原因について

JSONファイルに対して、テキストに文字列を追加する‘a'(追記モード)を使って辞書型データを追加すると、json.load関数でデータを読み込めなくなります。

そして、テキストファイルの文字列を読み込むread関数を使えば読み込むことができるのですが、そのread関数を使って読み込んだことが原因で、辞書型データの中カッコ”}”コロン”:”などすべてが1つの文字列になり、辞書型データの取り出し方ができなくなります。

※json.load関数はJSONファイルのデータを読み込むときに使う関数です。

JSONファイルに書き込み”w”追記”a”をしたプログラムがこちら↓

JSONファイルの様子

この投稿で使うJSONファイルをメモ帳で開いた様子になります。

read関数で読み込んでから、print文で表示した様子になります。
type関数で型の確認もしています。

JSONファイルをメモ帳で開いた様子とprint文で表示した様子からこのJSONデータ
リストの中に2つの辞書型データが入っていなくて、なおかつ辞書型データ間のカンマ(,)がないので、同じJSONファイル内に辞書型データが別々に入っている状態です。

read関数で読み込んで、print文で表示するプログラムがこちら↓

文字列を辞書型データにするプログラム

プログラムの説明をします。

3~5行目はJSONファイルをread関数を使って読み込み、そのデータを変数j_dataに格納しています。

7行目は2つの辞書型データが1つの文字列になっているので、split関数を使って中カッコ”}”を軸に文字列のデータを分けてから、リストにしています。

split関数についての投稿はこちら↓
Pythonのsplit関数とstrip関数について例文を用いて解説します

8行目は中カッコ”}”を軸にsplit関数を使ってリストにすると、最後に空文字のデータができてしまうので、del関数を使って消しています。

9、10行目は中カッコ”}”を軸にして、リストを作ると中カッコ”}”が消えてしまうので、プラス演算子(+)で足しています。

12行目は文字列を辞書型データにするastモジュールを追加しています。

14~16行目はリストに入った辞書型データのような文字列を、astモジュールast.literal_eval関数で辞書型データにしています。そして、その辞書型データを文字列だった場所に代入しています。

18、19行目のprint文を実行した様子↓

これをJSONファイルに書き直せば、辞書型データとして扱えるJSONファイルができます。

辞書型データをJSONファイルに書き込むプログラム

「文字列を辞書型データにするプログラム」の19行目の下に、このプログラムを追加すればJSONファイルに辞書型データが書き込まれます。

JSONファイルをメモ帳で開いた様子↓

pythonプログラムで表示した様子↓


この投稿以外にPythonとJSONを使った投稿がこちら↓

JSONファイルにデータを追加するPythonプログラムを紹介します

Pythonで作成したJSONファイルをJavascriptで読み込んで表示します