Pythonでテキストファイルを読み込む方法は以前紹介しました。
jsonファイル自体もテキストファイルなので、他のテキストファイルと同様に
open()で開いて読み込み後に文字列処理をすれば、意図した結果を得られるでしょう。
でも文字処理だけでjsonファイルの内容を取得するのは効率的ではありませんし、そもそもjsonフォーマットの意味が無くなってしまいます。
Python にはjsonフォーマットで書かれたテキストを簡単に扱うことが出来るモジュール「jsonモジュール」が備わっています。
このjsonモジュールを使うことでPythonでjsonファイルを簡単に読み書き利用する事が可能になります。
この記事ではPythonでjsonファイルを扱うことが可能になる「jsonモジュール」の使い方を紹介したいと思います。
|
jsonファイルとは
jsonファイルは以下のjsonフォーマットで定められた規則に沿って書かれたテキストファイルです。ファイルの拡張子は「.json」
- 「key:value」を一組にして記述
- 「key:value」が複数の場合「,」で区切る
- 「key:value」のまとまりは「{}」で囲む
- valueには数値・文字列以外にもリスト「[]」や「{key:value,…}」のまとまりもOK
表記が簡単で視認性も高いのでWEBなど様々な分野で使われているデータフォーマットです。
文字コードUTF-8で保存したファイル名「json_file.json」でjsonファイルを作りました。
Pythonのjsonモジュールを使ってjsonファイルを読み込む
jsonファイルは前の項目に書いたようにテキストファイルです。なのでPythonでjosnファイルを開くには他のテキストファイル同様に
open()
関数を使います。
そしてopen()関数で受け取ったFileオブジェクトをjsonモジュールのload()関数で内容を受け取ります。
json.load(Fileオブジェクト)
それでは json.load()を使ってjsonファイルを読んでみたいと思います。
Python3.x系で日本語を含むjsonファイルを読み込む場合
Python3.x系はopen()関数に引数
encoding
で文字コードを指定できるので”utf-8″を指定します。
import json
jsonfile = "D:/liquidJumper/json_file.json"
jsonfile_open = open(jsonfile,"r",encoding="utf-8")
jsonfile_load =json.load(jsonfile_open)
print(jsonfile_load)
jsonfile_open.close()
説明:
jsonfile_open = open(jsonfile,"r",encoding="utf-8")
Python3.x系のopen()関数に文字コード”utf-8″を指定しました。
jsonfile_load =json.load(jsonfile_open)
jsonモジュールのjson.load()でファイル内容を読み込みます。
読み込んだ戻りを変数「jsonfile_load」に代入します。
print(jsonfile_load)
変数「jsonfile_load」に代入された内容を出力
jsonfile_open.close()
Fileオブジェクトを閉じます
結果:
json.load()で読み込むとjsonフォーマットで書かれた内容が、Pythonの辞書形式に変換され読み込まれます。
辞書形式で受け取れるので、後はPythonの辞書として処理する事ができとても便利です。
import json
jsonfile = "D:/liquidJumper/json_file.json"
jsonfile_open = open(jsonfile,"r",encoding="utf-8")
jsonfile_load =json.load(jsonfile_open)
print(jsonfile_load["hiroshima"])
print(jsonfile_load["aichi"][1])
jsonfile_open.close()
説明:
print(jsonfile_load["hiroshima"])
“hiroshima”をKeyにして値を取得します
print(jsonfile_load["aichi"][1])
“aichi”をKeyにして値のリストから2番目の要素を取得します。
結果:
“hiroshima”をKeyから「マツダ」、”aichi”をKeyで受け取ったリストの2番目の要素「denso」が出力されました。
denso
Python2.x系で日本語を含むjsonファイルを読み込む場合
Python2.x系はopen()関数に文字コードを設定する事が出来ないので、値を受け取るのには工夫が必要です。
# coding:utf-8
import json
jsonfile = "D:/liquidJumper/json_file.json"
jsonfile_open = open(jsonfile,"r")
jsonfile_load =json.load(jsonfile_open)
print(jsonfile_load)
csvfile_open.close()
説明:
jsonfile_open = open(jsonfile,"r")
Python2.x系はopen()関数に文字コードを設定する事が出来ません
結果:
辞書に変換されて読み込まれましたが日本語が「Unicodeエスケープ」で出力されてしまいます。
辞書で受け取った段階では日本語は「u’\u30de」などのUnicodeエスケープになってしまいますが、辞書からKeyを使って値を受け取ってみると問題なく日本語の値を受け取ることが出来ます。
# coding:utf-8
import json
jsonfile = "D:/liquidJumper/json_file.json"
jsonfile_open = open(jsonfile,"r")
jsonfile_load =json.load(jsonfile_open)
print(jsonfile_load["hiroshima"])
csvfile_open.close()
説明:
print(jsonfile_load["hiroshima"])
“hiroshima”をKeyにして値を取得し出力します
結果:
日本語文字列で出力されました。
日本語の値は問題なく取得できるは確認できました。
今度はKeyを日本語にして値を受け取ります。
# coding:utf-8
import json
jsonfile = "D:/liquidJumper/json_file.json"
jsonfile_open = open(jsonfile,"r")
jsonfile_load = json.load(jsonfile_open)
print(jsonfile_load)
print(jsonfile_load["mie"][u"車"])
jsonfile_open.close()
説明:
print(jsonfile_load["mie"][u"車"])
辞書「jsonfile_load」からKey「”mie”」で辞書を取得。
取得した辞書からKey「u”車”」で値を取得
結果:
Key「”mie”」で受け取った辞書から日本語のKey「u”車”」で値「honda」を受け取ることが出来ました。
Pythonのとても有効な機能なので是非覚えることをオススメします。
|
Pythonのjsonモジュールを使ってjsonファイルに書き込む
jsonモジュールを使ってjsonファイルに書き込むには
json.dump(辞書,Fileオブジェクト,ensure_ascii,indent)
を使用します。
Python3.x系で日本語を含むjsonファイルを書き込む場合
import json
jsonfile = "D:/liquidJumper/json_file_new.json"
json_dic = {'aomori':u"りんご","ehime":u"みかん","fukushima":{u"果実":u"もも",u"野菜":u"きゅうり"}}
jsonfile_open = open(jsonfile,"w",encoding="utf-8")
json.dump(json_dic , jsonfile_open , ensure_ascii=False , indent=4)
jsonfile_open.close()
説明:
json_dic = {'aomori':u"りんご","ehime":u"みかん","fukushima":{u"果実":u"もも",u"野菜":u"きゅうり"}}
jsonファイルに書き込む内容を辞書形式で変数「json_dic」に代入します。
jsonfile_open = open(jsonfile,"w",encoding="utf-8")
open()関数でファイルを開きます。モードを”w”、エンコードを”utf-8″に指定。取得したFileオブジェクトを変数「jsonfile_open」に代入します。
json.dump(json_dic , jsonfile_open , ensure_ascii=False , indent=4)
json.dump()でjsonファイルに書き込みます。
第1引数に辞書の変数「json_dic」
第2引数にFileオブジェクト の変数「jsonfile_open」
第3引数で日本語がUnicode変換されないように「ensure_ascii=False」を設定第4引数のindentでインデントの数を指定。josnファイルに書き込まれた内容が読みやすくなります。
jsonfile_open.close()
Fileオブジェクトを閉じる
結果:
jsonファイル「json_file_new.json」が作られました。
Python2.x系で日本語を含むjsonファイルを書き込む場合
Python2.x系のopen()関数に文字コードは指定出来ないので、codecsモジュールの
codecs.open()
を使ってjsonファイルのFileオブジェクトを取得します。
# coding:utf-8
import json
import codecs
jsonfile = "D:/liquidJumper/json_file_new.json"
json_dic = {'aomori':u"りんご","ehime":u"みかん","fukushima":{u"果実":u"もも",u"野菜":u"きゅうり"}}
jsonfile_open = codecs.open(jsonfile, 'w', 'utf-8')
json.dump(json_dic , jsonfile_open , ensure_ascii=False , indent=4)
jsonfile_open.close()
説明:
jsonfile_open = codecs.open(jsonfile, 'w', 'utf-8')
open()関数ではなくcodecsモジュールの
codecs.open()
を使います。codecs.open()で文字コード”utf-8″を指定してFileオブジェクトを取得
結果:
Python2系で日本語も問題なくjsonファイル「json_file_new.json」が作る事ができました。
Python3系とPython2系でopen関数の機能に違いがある為Python2系で日本語を扱う時は文字化けに困惑しがちです。codecsモジュールはその回避に使われる方法の一つなので覚えて置くことをオススメします。
|
まとめ
Pythonでjsonファイルを読み書きする方法を紹介しました。
open()でFileオブジェクトを取得
取得したFileオブジェクトをjsonモジュールの
json.load()
で読み込む。
・Pythonでjsonファイルに書き込むには
Python3系の場合はopen()でFileオブジェクトを取得
Python2系の場合はcodecs.open()でFileオブジェクトを取得
取得したFileオブジェクトに辞書形式でjsonモジュールの
json.dump(辞書,Fileオブジェクト,ensure_ascii,indent)
で書き込む。
日本語がある場合Python3系とPython2系で多少扱い方が変わり厄介な部分もありますが、jsonフォーマットは「key:value」を一組にした記述でPythonの辞書と同じです。この部分だけでもPythonと非常に相性が良いと感じます。
Pythonで取り扱うデータフォーマットととしてjsonファイルを候補にする場合、jsonモジュールは必須になりるので、しっかり取り扱い方法を覚えることをオススメします。
月額定額制の完全オンライン・プログラミングスクール
「SAMURAI TERAKOYA(侍テラコヤ)」
・月々定額のサブスクで利用でき、入会金も不要、いつでも退会可能
・現役エンジニアの講師とマンツーマン・レッスンで疑問や悩みを解決
・オンラインで学べるので地方在住者でも受講可能
|
|
BTOパソコンの草分け的ブランドFRONTIER(フロンティア) 3DCG/動画編集/ゲーム用途に合わせてCPUやGPUなどパーツを自由に選べてコスパにもこだわる方にオススメ。 |
|
|
|
|
|