JSON

【初心者向け】PythonでJSONファイル・JSON文字列を出力する方法 【dump/dumps】

はじめに

Python組み込みの「json」モジュールを使って、辞書型のデータから、JSON文字列・JSONファイルを作成する方法を解説します

環境

この記事は以下の環境で作成しています。

Python   3.9.6
OS            Windows10                  

JSONファイル

以下のJSONファイルを、ベースのデータとして使用します。

{
    "Email": "james@example.com",
    "Active": true,
    "CreatedDate": "2013-01-20T00:00:00Z",
    "Roles": [
      "User",
      "Admin"
    ]
}

実行結果

後述の「JSONを出力するコード」の実行結果です。前述のJSONファイルを読み込んで、一部を変更した後、JSON文字列・JSONファイルを出力しています。表示・出力内容は以下の通りです。

表示・出力内容
  • JSON文字列( 改行・インデントなし )
  • JSON文字列( 改行あり・スペース2つのインデント )
  • JSONファイル

実行時の表示内容

# "インデントなし" のJSON文字列の表示です
{"Email": "taro@example.com", "Active": true, "CreatedDate": "2013-01-20T00:00:00Z", "Roles": ["User", "Admin"]}

# "スペース2個でインデントした文字列の表示です"
{
    "Email": "taro@example.com",
    "Active": true,
    "CreatedDate": "2013-01-20T00:00:00Z",
    "Roles": [
        "User",
        "Admin"
    ]
}

出力したJSONファイルの内容

{
  "Email": "taro@example.com",
  "Active": true,
  "CreatedDate": "2013-01-20T00:00:00Z",
  "Roles": [
    "User",
    "Admin"
  ]
}

全体コード

「JSONを出力するコード」の全体です。ポイント部分は後述の「コードのポイント」で詳しく解説します。

import json

# JSONファイルを読み込みます
with open("test.json", "r") as file:
    dict = json.load(file)

# 要素を指定して代入で、値の書き換えができます
dict["Email"] = "taro@example.com"

# json "文字列" に出力します(インデントなし)
jsonStr = json.dumps(dict)

# json "文字列" に出力します(インデント スペース2つ)
jsonStrIndent = json.dumps(dict,indent=2)

# 変換した文字列を表示します
print(jsonStr)
print(jsonStrIndent)

# json "ファイル" に出力します
with open("output.json", "w") as outputFile:
    # json.dump(dict, outputFile)
    json.dump(dict, outputFile, indent=2 )

コードのポイント

JSONファイルを開く・データを変更する

# JSONファイルを読み込みます
with open("test.json", "r") as file:
    dict = json.load(file)

# 要素を指定して代入で、値の書き換えができます
dict["Email"] = "taro@example.com"

open関数を使ってJSONファイル読み込み、「Email」の内容を変更します。この部分の詳細は以下の記事をご覧ください

dump"s" で「JSON文字列」を生成

jsonモジュールの「dumps」関数で、辞書のデータからJSON文字列を作成します。

「indent=」を指定しないと、「改行・インデントなし」のJSON文字列が作成されます。元のファイルのようなインデント済みの文字列を作成したい場合は「indent=」でインデントするスペースの数を指定してください。

# json "文字列" に出力します(インデントなし)
jsonStr = json.dumps(dict)

# json "文字列" に出力します(インデント スペース2つ)
jsonStrIndent = json.dumps(dict,indent=2)

dumpで「JSONファイル」を生成

jsonモジュールのdump関数で、辞書のデータからJSONファイルを生成します。

dump関数には、出力したいファイルの情報を渡す必要があります。そのため、open関数で以下の内容のファイルオブジェクトを作成します。

ファイルオブジェクトと辞書のデータを、「dump」関数に渡すと、JSONファイルをが出力されます。

  • 作成するJSONファイル名 (output.json)
  • モード設定 ("w")
  • ファイルオブジェクト ( outputFile )

※ ()内はコード上で記載している内容です。

# json "ファイル" に出力します
with open("output.json", "w") as outputFile:
    # json.dump(dict, outputFile)
    json.dump(dict, outputFile, indent=2 )

文字列を出力する「dump"s"」関数と同様、「dump」関数も「indent=」を指定しないと改行なしJSONデータが出力されます。改行やインデントを入れたい場合は「indent=」でスペースの数を指定してください。

まとめ

Python組み込みの「json」モジュールを使って、JSON文字列・JSONファイルを作成する方法する方法を解説しました。参考になればうれしいです。

このブログではjsonモジュールの以下の内容も公開しています。興味のある方は以下の記事も是非ご覧ください。

jsonモジュールでJSONファイルを読み込む方法

応援・要望お待ちしてます

ブログを見ていて「この辺を詳しく知りたい」「このライブラリの使い方を知りたい」「こんなことで困ってる」...etc があれば、コメント・問い合わせ・Twitterで教えてください。質問・ご要望に合わせて解説記事を作ります。

ブログを気に入っていただけたり、「応援してもいいよ」という方がいたら、ブログやSNSでの紹介をお願いします。 あたたかい応援は、中の人の更新の大きな励みになります。

ABOUT ME
えす
現役のソフトウェアエンジニアです。 C++ C# Python を使ってます。10年ちょい設計/開発部門にいましたが、今はQAエンジニアっぽいことをしています。

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です