Python用モジュール「json」でjsonファイルを扱う方法についてソースコード付きでまとめました。
【はじめに】jsonファイルとは
JSON(JavaScript Object Notation)とは、JavaScript言語のオブジェクト表記法をベースとしたテキスト形式のデータファイルです。
XMLと比べて簡潔に構造化データを記述できます。
そのため、Webサービスなどよく利用されています。
Pythonでは標準モジュール「json」等でJSON形式のデータファイルを扱うことができます。
JSON形式ファイルの書式は次の通りです。
書式
{キー1:要素1, キー2:要素2,…}
よって、Pythonの辞書とJSON形式はほとんど同じなものです。
例
{ "西住":{ "height": 158 , "position": "車長" }, "秋山":{ "height": 157 , "position": "装填手" } }
【基本操作】JSONファイルの読み込み・書き込み
Pythonの標準モジュール「json」を用いて、JSON形式ファイルのロードします。
# -*- coding:utf-8 -*- import json #JSON ファイルの読み込み f = open('test.json', 'r', encoding="utf-8_sig") json_data = json.load(f) print(json_data) f.close()
test.json
読み込んだJSONファイルです。
{ "西住":{ "height": 158 , "position": "車長" }, "秋山":{ "height": 157 , "position": "装填手" } }
補足
Windows環境を使用しているとjson.loadメソッドが「デフォルトでcp932でコーディング」されます。
そのため、UTF-8のJSONファイルを読み込み時は、UTF-8でコーディングする様にjson.loadメソッドに引数で指定します。
■参考:【Python/json】「UnicodeDecodeError: ‘cp932’ codec can’t decode~」エラーの対処方法
書き込み
# -*- coding:utf-8 -*- import json # 空の辞書を作成 data = {} # 辞書にデータを挿入 data["西住"] = {"height": 158 , "position": "車長"} data["秋山"] = {"height": 157 , "position": "装填手"} # JSONファイルに出力 json.dumps(data, ensure_ascii=False)
test.json
出力したJSONファイルです。
{ "西住":{ "height": 158 , "position": "車長" }, "秋山":{ "height": 157 , "position": "装填手" } }
補足
json.dumpsで、「ensure_ascii=False」を指定することで出力されるJSONファイルの文字コードがUTF-8となり日本語の文字化けを回避できます。
– | 詳細ページ |
---|---|
読み込み | ■JSONファイルの読み込み |
書き込み | ■JSONファイルの書き込み |
【データ処理】特定のデータ(要素)を取り出す
Pythonの標準モジュール「json」を用いて、JSON形式ファイルのロードします。
ロードしたデータは辞書型なので、キーを指定することで要素を取り出せます。
# -*- coding:utf-8 -*- import json #JSON ファイルの読み込み f = open('test.json', 'r', encoding="utf-8_sig") json_data = json.load(f) print(json_data["西住"]) # {'height': 158, 'position': '車長'} print(json_data["秋山"]) # {'height': 157, 'position': '装填手'} f.close()
test.json
読み込んだJSONファイルです。
{ "西住":{ "height": 158 , "position": "車長" }, "秋山":{ "height": 157 , "position": "装填手" } }
– | 詳細ページ |
---|---|
抽出 | ■データ(要素)の抽出 |
【ファイル変換】CSV、JSON
Pythonモジュール「Pandas」ではread_jsonメソッドでJSONファイルを読み込み、to_csvメソッドでCSVに変換して保存できます。
JSON → CSV
JSONからCSVに変換するソースコードです。
# -*- coding: utf-8 -*- import pandas as pd # JSONファイルを読み込む df = pd.read_json("C:\prog\python\\test\data.json", encoding="UTF-8") # CSVに変換して保存 df.to_csv("C:\prog\python\\test\data.csv", encoding="UTF-8")
CSV → JSON
CSVからJSONに変換するソースコードです。
# -*- coding: utf-8 -*- import pandas as pd # CSVファイルを読み込む df = pd.read_csv("C:\prog\python\\test\data.csv", encoding="UTF-8") # JSONに変換して保存 df.to_json("C:\prog\python\\test\data.json")
■data.json
{ "西住":{ "height": 158 , "position": "車長" }, "秋山":{ "height": 157 , "position": "装填手" } }
■data.csv
,西住,秋山 height,158,157 position,車長,装填手
コメント