Python で JSON 書き込みをする

Python で JSON 書き込みをするPython
ゆうすけ
ゆうすけ

Python で JSON に書き込みしたいです。

資格マフィア
資格マフィア

Python で JSON に書き込む方法について解説しよう。

 

✔️ 本記事のテーマ

 Python に JSON に書き込む方法

 

✔️ 読者さんへの前置きメッセージ

本記事は
「Python プログラムで JSON を作成する方法」
について書いています。

 

json.dump を使って JSON に書き込む方法 や その際のオプションについて解説します。

 

この記事に掲載しているサンプルコードは環境さえ整っていれば、
コピペで動くはずなので使用して頂いてOKです。

 

では、解説していきましょう。

 

Python プログラムから JSON に書き込む

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.dumpwith open 句で囲んで使います。

 

with open 句の引数に JSON ファイルのファイルパスを指定することで、
既存のファイルに書き込みを行うことができます。

 

Python プログラムから 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 に書き込みする際のオプション

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 に書き込む

サードライブラリを使って 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 について独学でスキルを磨くための 1 冊

Pythonで JSON に書き込む方法について解説しました。

 

Pythonを基礎から学ぶためには以下の書籍がオススメです。

 

この書籍は初心者向けにかなり丁寧に書かれています。

プログラミング本は難しく、
とっつきにくい印象があるかもしれませんが、
この書籍はとても分かりやすく、
読んでいて「楽しい」と思えるような書きっぷりになっています。

 

初めてPythonを基礎から学ぶ方にはオススメの書籍です。

エンジニアとしての自身の価値をチェックする(完全無料)

エンジニアとして、

自分の価値がどれくらいのものかご存知でしょうか?

 

エンジニアとしてIT業界に身を置いていると

今の会社でずっと働くのか、フリーランスとして独立するのか …

と様々な選択肢があります。

 

どの選択肢が正解なのかを見極めるためにも、選択肢を広げるためにも

自身の価値を知っておくことはとても重要です。

 

TechClips ME では、

職務経歴書をアップロードするだけで企業からのスカウトを受けることができます。

▼▼▼▼▼

▲▲▲▲▲

しかもTechClips MEでは想定年収を企業から提示してくれるので、

自身の価値を数字で分かりやすくたしかめることができます。

 

登録はもちろん完全無料なので、一度登録してみると良いかもしれません。

 

コメント

タイトルとURLをコピーしました