Python_jsonファイルの扱い
Python_jsonデータの扱い方
Pythonではjsonモジュールをimportすることで、jsonデータを容易に扱うことができます。
また、json形式とPythonのリストや辞書形式は親和性が高いので、入出力用の変換処理がほぼ必要ありません。
JSON ファイルの読み込み
JSON ファイルを読み込みファイルとして開いてjson.load 関数で読み込むと、辞書型でデータが保存されます。
要素へのアクセスも辞書型データとしてアクセスすることができます。
import json
def read_json_file(json_file):
try:
with open(json_file, mode='r', encoding="utf-8") as fd:
return json.load(fd)
except Exception as e:
print(e.args)
return json.loads("{}")
if __name__ == "__main__":
json_data = read_json_file("./conf.json")
print(json_data["system"]["username"])
JSON ファイルへの書き込み
ファイルへの書き込みは json モジュールの dump 関数を使います。
import json
def write_json_file(json_dict, filepath):
try:
with open(filepath, mode='w', encoding='utf-8') as fd:
json.dump(json_dict, fd)
return True
except Exception as e:
print(e.args)
return False
if __name__ == "__main__":
dic = {}
dic["key1"] = "value1"
dic["key2"] = []
dic["key2"].append({"key3": "value3"})
dic["key2"].append({"key4": "value4"})
write_json_file(dic, "./output.json")
整形して出力する
dump()にはJSONデータをインデントと改行を加えて見やすく整形するためのオプションが用意されています。
with open(filepath, mode='w', encoding='utf-8') as fd:
json.dump(json_data, fd, indent=4, ensure_ascii=False,
sort_keys=True, separators=(',', ': '))
JSON データの変換
辞書型から文字列型
辞書型から JSON 形式の文字列への変換は json.dumps() 関数を使います。
def json_to_str(json_dict):
json_str = json.dumps(json_dict)
print(json_str)
文字列型から辞書型
JSON 形式の文字列を辞書型に変換するには json.loads() 関数を使います。
def str_to_json(json_str):
json_dict = json.loads(json_str)
print(json_dict)
datetime型を含むJSONデータ
datetime型を含むディクショナリ型を出力するにはエンコーダを拡張する関数を呼び出す必要があります。
JSONにはdatetime型が定義されていないため、
import json
from datetime import datetime
def serialize_json_date(obj):
if isinstance(obj, datetime):
# return obj.isoformat()
# 下記のように整形することも可能。
return obj.strftime("%Y-%m-%d %H:%M:%S")
raise TypeError ("Type %s not serializable" % type(obj))
if __name__ == "__main__":
dic = {"now": datetime.now()}
json_str = json.dumps(dic, default=serialize_json_date)
print(json_str)
関連ページ
- Python
- Python_シェルコマンドを実行する
- Python_HTML解析
- Python_jsonファイルの扱い
- Python_urllibでHTTPリクエスト
- Python_マークルツリーを実装する