今回は、PythonでのJSONファイルの扱い方を紹介していきます!
JSONはあまり聞きなれなかったり、データの構造がcsvやexcelファイルと比べてわかりづらく、敬遠されがちかもしれません。
基本を理解することができれば、とっても便利なデータ形式なんです。
この記事を通して、JSONファイルとは?ということと、PythonでのJSONファイルの扱い方を理解してもらえれば幸いです^^
JSONとは
JSONは”JavaScript Object Notation”の略で、辞書型のデータを扱うフォーマットです。
アプリケーションの構成ファイルとして、データベースの情報などアプリケーションの動作に必要な情報を保持する際に用いられたりします。
辞書型について
辞書型のデータは、キーと値のペアでデータを格納するデータ形式です。
例えば、以下のように表します
"動物": "ネコ"
この場合、“動物”がキーで、”ネコ”が値です。
1つのキーで、複数の値を持たせたい場合は、値を配列にします。
"動物": ["ネコ", "イヌ", "イルカ", "ゾウ"]
JSONの書き方
辞書型のデータ構造が理解できれば、JSONファイルの中身を書いてみます。
JSONファイルでは、キーと値のペアの塊を{ }で括ります。
{
"動物": "ネコ",
"乗り物": "クルマ",
"国": 日本
}
インデントをすれば、データの構造がより見やすくなります。
また、ペア同士をカンマ(,)で区切るのを忘れないようにしてください。
入れ子構造にもできる
{ }を組み合わせて入れ子構造にすることもできます。
{
{
"動物": "ネコ",
"乗り物": "クルマ",
"国": "日本"
},
{
"動物": "イヌ",
"乗り物": "バイク",
"国": "アメリカ"
}
}
これによって、複雑なデータ構造も表現することができます。
個人的には、あまり入れ子にしすぎることをお勧めしません(複雑になり、処理も面倒になるため)。
一応こういうこともできると知っておくくらいでいいと思います。
PythonでJSONファイルを扱う
それでは、Pythonを使ってJSONファイルを扱ってみましょう。
今回は”sample.json”を使います。
JSONファイルを読み込む
JSONファイルを扱うときは、”json”ライブラリをインポートします。
そして、with構文の中で、ファイルを読み込んでいきます。
import json
with open("sample.json", encoding="utf-8") as file:
data = json.load(file)
今回は、プログラムと同じディレクトリにsmple.jsonがあるので、パス指定はファイル名のみです。
Windowsのメモ帳でJSONファイルを作ると、デフォルトでは文字コードがcp932(Shift-JIS)になってしまいます。このままだと読み込みの際にエラーが出るので、utf-8で読み込むように指定します。
JSONファイルの読み込み自体はjson.load()関数を使います。
これで、”data”にJSONファイルの中身が格納されているはずです。
読み込み自体はこれで完了です^^
値の取得
値を取得するには、キーを指定します。
data["動物"]
入れ子(ネスト)構造の場合は[キー][キー]のように、連続で指定することで値を取得することができます。
値を変数に格納することもできます。
animal = data["動物"]
値の追加、変更、削除
存在しないキーを指定して値を代入すると、新たなキーと値が要素として追加されます。
例えば、”家具”というキーに”ソファ”という値を追加します。
data["家具"] = "ソファ"
追加されています^^
もともと存在するキーに新たな値を代入することで、値を変更することができます。
“動物”を”インコ”に置き換えてみます。
data["動物"] = "インコ"
要素の削除には、pop()メソッドを使います。
data.pop("国")
“国”の要素が削除されました。
JSONファイルを出力する
読み込み時と同様に、with構文を用います。
with open("sample2.json", "w", encoding="utf-8") as file:
data = json.dump(data, file, ensure_ascii=False)
openの中で、書き込みであることを宣言する”w”を忘れずに書きます。
JSONの出力は、json.dump()を使います。
第一引数に出力するデータを、第二引数に出力先情報(パスなど)を指定します。
しかし、それだけでは、出力したファイルの日本語部分が正規表現に置き換えられて読みづらくなってしまいます(というか読めない)。
そこで、ensure_ascii=False を指定します。これによって、出力後も日本語としてテキストが表示されるようになります。
ただし、ensure_ascii=Falseを使用すると、処理速度が遅くなるといったデメリットもあるようです(サイズの小さなファイルでは気にならないと思いますが)。
まとめ
JSONファイルについての説明と、Pythonでの使い方を解説してきました。
辞書型のデータは、初めはとっつきにくいですが、慣れると便利だったりします^^
色々なデータ型に慣れて、場合によって使い分けられるようにしたいですね。
ではでは👋