Python で JSON に書き込みしたいです。
Python で JSON に書き込む方法について解説しよう。
✔️ 本記事のテーマ
Python に JSON に書き込む方法
✔️ 読者さんへの前置きメッセージ
本記事は
「Python プログラムで JSON を作成する方法」
について書いています。
json.dump を使って JSON に書き込む方法 や その際のオプションについて解説します。
この記事に掲載しているサンプルコードは環境さえ整っていれば、
コピペで動くはずなので使用して頂いてOKです。
では、解説していきましょう。
Python プログラムから JSON に書き込む
Python プログラムから JSON に書き込むには json.dump を使用します。
import json
sample_dict = {'A': 'apple', 'B': 'banana', 'C': 'carrot', 'D': 'drink', 'E': 'egg'}
with open('./sample.json', 'w') as f:
json.dump(sample_dict, f)
json.dump には dict 型を渡すことで、キーと値の形式を保って JSON に書き込むことができます。
なお、ファイル IO になるので json.dump を with open 句で囲んで使います。
with open 句の引数に JSON ファイルのファイルパスを指定することで、
既存のファイルに書き込みを行うことができます。
Python プログラムから JSON を作成する
json.dump を使う際に存在しない JOSN ファイルを指定することで
JSON ファイルを新規作成することができます。
新規作成されたファイルの中身は json.dump で渡す dict データになります。
$ cat ./new.json
cat: ./new.json: No such file or directory
この状態で以下のコードを実行します。
import json
sample_dict = {'A': 'apple', 'B': 'banana', 'C': 'carrot', 'D': 'drink', 'E': 'egg'}
with open('./new.json', 'w') as f:
json.dump(sample_dict, f)
すると、指定した内容の JSON ファイルが新規作成されます。
$ cat ./new.json
{"A": "apple", "B": "banana", "C": "carrot", "D": "drink", "E": "egg"}
JSON に書き込みする際のオプション
Python から JSON に書き込みをする際に、
オプションを指定することで様々な書き込みが可能となります。
主なオプションは以下の通りです。
- indent
- ensure_ascii
- separators
- sort_keys
順番に解説していきましょう。
なお、上のリンクは記事内リンクになっています。
JSON 書き込みのオプション: indent
indent オプションを指定することで、要素ごとに改行、インデントした出力になります。
import json
sample_dict = {'A': 'apple', 'B': 'banana', 'C': 'carrot', 'D': 'drink', 'E': 'egg'}
with open('./sample.json', 'w') as f:
json.dump(sample_dict, f, indent=4)
このコードを実行すると、以下のような JSON ファイルが出力されます。
{
"A": "apple",
"B": "banana",
"C": "carrot",
"D": "drink",
"E": "egg"
}
要素ごとに改行されて、半角スペース4つインデントされてます。
このように、indent オプションをつけることで、見やすい JSON として出力することができます。
JSON 書き込みのオプション: ensure_ascii
ensure_ascii オプションを指定することで、
全角文字などの非ASCII文字をUnicodeエスケープせずに出力することができます。
そもそも json.dump() では日本語などの非ASCII文字を出力しようとすると、
Unicodeエスケープされて出力されます。
試しに、以下のように ‘卵’ という文字を json.dump() してみましょう。
import json
sample_dict = {'A': 'apple', 'B': 'banana', 'C': 'carrot', 'D': 'drink', 'E': '卵'}
with open('./sample.json', 'w') as f:
json.dump(sample_dict, f)
このコードを実行すると、 sample.json の中身は以下のようになってしまいます。
{"A": "apple", "B": "banana", "C": "carrot", "D": "drink", "E": "\u5375"}
‘卵’ の文字が “\u5375” という表記にUnicodeエスケープされています。
そこで、 ensure_ascii=False とすると、Unicodeエスケープをせずに出力することができます。
import json
sample_dict = {'A': 'apple', 'B': 'banana', 'C': 'carrot', 'D': 'drink', 'E': '卵'}
with open('./sample.json', 'w') as f:
json.dump(sample_dict, f, ensure_ascii=False)
これにより、日本語などの非ASCII文字をそのまま JSON 出力することができます。
{"A": "apple", "B": "banana", "C": "carrot", "D": "drink", "E": "卵"}
JSON 書き込みのオプション: separators
json.dump() では dict の key と value の間を : 、 要素の間を , で区切って出力されます。
separators オプションでそれぞれの区切り文字を指定することができます。
なお、separators オプションは以下のように
(要素の区切り文字, keyとvalueの間) の tuple で指定します。
import json
sample_dict = {'A': 'apple', 'B': 'banana', 'C': 'carrot', 'D': 'drink', 'E': 'egg'}
with open('./sample.json', 'w') as f:
json.dump(sample_dict, f, separators=('/', '_'))
このコードを実行すると、以下の JSON が出力されます。
{"A"_"apple"/"B"_"banana"/"C"_"carrot"/"D"_"drink"/"E"_"egg"}
要素の区切り文字が / で、key と value の間が _ で出力されています。
JSON 書き込みのオプション: sort_keys
sort_keys=True とすると、dict の key を基準にソートして出力します。
例えば、以下のように、要素の順番をバラバラにした sample_dict を
sort_keys オプションをつけて json.dump() を通してみます。
import json
sample_dict = {'B': 'banana', 'C': 'carrot', 'A': 'apple', 'D': 'drink', 'E': 'egg'}
with open('./sample.json', 'w') as f:
json.dump(sample_dict, f, sort_keys=True)
すると、以下のように、key順にソートされて出力されます。
{"A": "apple", "B": "banana", "C": "carrot", "D": "drink", "E": "egg"}
サードライブラリを使って JSON に書き込む
ここまで、Python の標準ライブラリで JSON に書き込みをする方法を解説してきました。
Python ではサードパーティライブラリを使って JSON に書き込みをすることもできます。
例えば、以下のように Marshmallow ライブラリを使って、
JSON の 読み込み / 書き込み をすることができます。
# MOdel 定義
class SampleModel(AllArgConstructorModel):
def __init__(self, **kwargs):
for k, v in kwargs.items():
setattr(self, k, v)
# Schema 定義
class SampleModelSchema(Schema):
id = fields.Int(required=True)
name = fields.Str(required=True)
@post_load
def build(self, data, **kwargs):
return SampleModel(**data)
# Schema インスタンスの作成
schema = SampleModelSchema()
# LOAD
smp = schema.load(smp)
# DUMP
schema.dumps(SampleModelSchema(name='Taro', age=20))
なお、Marshmallow を使った JSON の 読み込み / 書き込み については
「marshmallowの使い方【Pythonライブラリ】」
の記事で詳しく解説しています。
Python について独学でスキルを磨くための 1 冊
Pythonで JSON に書き込む方法について解説しました。
Pythonを基礎から学ぶためには以下の書籍がオススメです。
この書籍は初心者向けにかなり丁寧に書かれています。
プログラミング本は難しく、
とっつきにくい印象があるかもしれませんが、
この書籍はとても分かりやすく、
読んでいて「楽しい」と思えるような書きっぷりになっています。
初めてPythonを基礎から学ぶ方にはオススメの書籍です。
エンジニアとしての自身の価値をチェックする(完全無料)
エンジニアとして、
自分の価値がどれくらいのものかご存知でしょうか?
エンジニアとしてIT業界に身を置いていると
今の会社でずっと働くのか、フリーランスとして独立するのか …
と様々な選択肢があります。
どの選択肢が正解なのかを見極めるためにも、選択肢を広げるためにも
自身の価値を知っておくことはとても重要です。
TechClips ME では、
職務経歴書をアップロードするだけで企業からのスカウトを受けることができます。
▼▼▼▼▼
▲▲▲▲▲
しかもTechClips MEでは想定年収を企業から提示してくれるので、
自身の価値を数字で分かりやすくたしかめることができます。
登録はもちろん完全無料なので、一度登録してみると良いかもしれません。
コメント