PythonでJSONファイルの書き込み、読み込み、追加について
PythonでJSONファイルのの書き込み、読み込み、追加について、例文とJSONファイルの中の様子を交えて解説します。
目次
・JSONファイルを操作する形、操作方法
・json.dumpを使った書き込み
・json.loadを使った読み込み
・json.dumpsを使った変換
・json.loadsを使った変換
・追加
・withを使った書き込み、読み込み
・参考サイト
JSONファイルを操作する形、操作方法
JSONファイルを操作する形
import json
変数=open(“ファイル名”,”操作モード”)
json.操作方法(変数 or 変数、書き込むデータ)
変数.close()
JSONファイルを操作する形はopen()で指定したファイル名と操作モード(“w”、”r”)でJSONファイルを開いて、そのファイル情報を変数に格納します。そして、その変数または変数と書き込むデータを合わせたものに対して指定した操作方法を行い、それが終わればclose()でファイルを閉じます。
テキストファイルの操作とは違いJSONファイルの操作はimport jsonが必要になります。
※close()がないと正常な操作が行われないです。
※”w”・・・書き込みモード
※”r”・・・読み込みモード
操作方法
json.dump
Pythonの辞書型データやリストなどをJSONファイルに書き込みます。書き込んだデータはJSON 形式の文字列に変換されます。
json.load
JSONファイルのデータをを読み込みます。読み込んだデータはPythonで扱える辞書型データやリストなどの形になります。
json.dumps
Pythonの辞書型データをJSON 形式の文字列に変換します。JSONファイルには書き込めないです。
json.loads
JSON形式の文字列をPythonの辞書型データに変換します。JSONファイルを読み込むことができないです。
json.dumpを使った書き込み
1 2 3 4 5 6 7 |
import json data1={"1001":"佐藤","1002":"塩田","1003":"菅"} j_w=open("json_f/j_py01.json","w") json.dump(data1,j_w,indent=2) j_w.close() |
プログラムの説明をします。
5行目はjson_fフォルダにj_py01.jsonが存在しないので、新規作成してからjson.dumpで辞書型データを書き込んでいます。
既にj_py01.jsonが存在する場合は、そのファイルに書かれてあるデータを削除して書き込みます(上書き)。
引数にindent=2をすることで、書き込む際に字下げをします。逆に、indentをしない場合はデータが横並びで書き込まれます。
JSONファイルに書き込まれたデータはJSON形式の文字列になるので、日本語は文字化けみたいになりますがjson.loadで読み込んで表示すると、日本語になります。
JSONファイルをメモ帳で開いた様子↓

●複数の辞書型データを書き込むプログラム
1 2 3 4 5 6 7 8 9 |
import json data2=[ {"1001":"佐藤","1002":"塩田","1003":"菅"}, {"1001":22,"1002":31,"1003":27}, {"1001":[56,171],"1002":[69,178],"1003":[65,164]} ] j_w=open("json_f/j_py02.json","w") json.dump(data2,j_w,indent=2) j_w.close() |
プログラムの説明をします。
複数の辞書型データを書き込む場合はリストに入れて書き込みます。
JSONファイルをメモ帳で開いた様子↓

json.loadを使った読み込み
1 2 3 4 5 6 7 8 9 10 |
import json #読み込み j_r=open("json_f/j_py01.json","r") j_show=json.load(j_r) j_r.close() #表示 print(j_show) print(j_show['1001']) |
プログラムの説明をします。
4~6行目はj_py01.jsonをjson.loadで読み込んで、読み込んだデータを変数j_showに格納しています。
読み込む際にJSONファイルが存在しない場合はエラーがでます。
10行目のj_show[‘1001’]は辞書型データの取り出し方で、表示しています。
print文で表示した様子↓

●複数の辞書型データを読み込むプログラム
1 2 3 4 5 6 7 8 9 10 11 12 |
import json #読み込み j_r=open("json_f/j_py02.json","r") j_show=json.load(j_r) j_r.close() #表示 for i in j_show: print(i) print(j_show[0]['1001']) |
プログラムの説明をします。
このプログラムで使うJSONファイルは、上のjson.dumpで書き込んだJSONファイルを読み込んでいます。
print文で3つの辞書型データを1回で表示することもできるのですが、見づらくなるのでfor文を使って1つずつ表示しています。
12行目のj_show[0][‘1001’]はリストの要素番号を指定してから、辞書型データを取り出しています。
print文で表示した様子↓

json.dumpsを使った変換
1 2 3 4 5 6 7 8 9 |
import json data1={"1001":"佐藤","1002":"塩田","1003":"菅"} #dumpsで文字列に変換する j_ds=json.dumps(data1,indent=2) print(j_ds) print(j_ds[0]) print(type(j_ds)) |
プログラムの説明をします。
6行目はjson.dumpsでPythonの辞書型データをJSON 形式の文字列に変換します。
8行目のj_data[0]は文字列の中カッコ”{“を表示しています。辞書型データすべてが文字列になるので、j_data[0]にすると中カッコ”{“が取り出されます。
9行目は型を確認しています。
print文で表示した様子↓

●JSONファイルのデータを使って、json.dumpsを行います。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import json #JSONファイルの読み込み j_r=open("json_f/j_py01.json","r") j_data=json.load(j_r) j_r.close() print(j_data) #dumpsで文字列に変換する j_ds=json.dumps(j_data,indent=2) print(j_ds) print(j_ds[0]) print(type(j_ds)) |
プログラムの説明をします。
7行目はjson.loadで読み込んだJSONファイルのデータを表示しています。
10行目はjson.loadで読み込んだJSONファイルのデータをjson.dumpsを使って、JSON 形式の文字列に変換しています。
このプログラムで使うJSONファイルは、上のjson.dumpで書き込んだJSONファイルを使っています。
print文で表示した様子↓

json.loadsを使った変換
1 2 3 4 5 6 7 8 9 10 11 |
import json data1={"1001":"佐藤","1002":"塩田","1003":"菅"} #dumps・・・Pythonの辞書型データをJSON形式の文字列に変換する j_ds=json.dumps(data1,indent=2) print(j_ds) #loads・・・JSON形式の文字列をPythonの辞書型データに変換します。 j_ls=json.loads(j_ds) print(j_ls) |
プログラムの説明をします。
6行目はjson.dumpsでPythonの辞書型データをJSON形式の文字列に変換しています。
10行目はJSON形式の文字列をjson.loadsを使って、Pythonの辞書型データに変換しています。
print文で表示した様子↓

追加
JSONファイルにデータを追加する方法は
辞書型データをそのまま追加する方法と辞書型データに追加する方法の2種類があると思うので、その2種類の追加方法について紹介した投稿を下記に載せておきます。
「JSONファイルにデータを追加するPythonプログラムを紹介します」
withを使った書き込み、読み込み
withを使った方法でもJSONファイルの書き込み、読み込みができます。
withを使う場合は.close()を書く必要がないので便利です。
JSONファイルに書き込み
1 2 3 4 5 6 |
import json data={"1001":"佐藤","1002":"塩田","1003":"菅"} with open("json_f/j_py03.json","w") as j_w: json.dump(data,j_w,indent=2) |
JSONファイルをメモ帳で開いた様子↓

JSONファイルの読み込み
1 2 3 4 5 |
import json with open("json_f/j_py03.json","r") as j_r: j_show=json.load(j_r) print(j_show) |
print文で表示した様子↓

参考サイト
https://docs.python.org/ja/3/library/json.html