<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>「dump」タグの記事一覧Python Tech</title>
	<atom:link href="https://tech.nkhn37.net/tag/dump/feed/" rel="self" type="application/rss+xml" />
	<link>https://tech.nkhn37.net</link>
	<description>Python学習サイト</description>
	<lastBuildDate>Thu, 29 Jan 2026 20:04:37 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://tech.nkhn37.net/wp-content/uploads/2021/01/cropped-lion-normal-clear-1-32x32.png</url>
	<title>「dump」タグの記事一覧Python Tech</title>
	<link>https://tech.nkhn37.net</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【Python】JSONの読み込み／書き込み方法 ~dump, load, dumps, loads~</title>
		<link>https://tech.nkhn37.net/python-json-dump-load/</link>
					<comments>https://tech.nkhn37.net/python-json-dump-load/#respond</comments>
		
		<dc:creator><![CDATA[naoki-hn]]></dc:creator>
		<pubDate>Fri, 06 May 2022 20:00:00 +0000</pubDate>
				<category><![CDATA[json]]></category>
		<category><![CDATA[dump]]></category>
		<category><![CDATA[dumps]]></category>
		<category><![CDATA[load]]></category>
		<category><![CDATA[loads]]></category>
		<guid isPermaLink="false">https://tech.nkhn37.net/?p=3781</guid>

					<description><![CDATA[Python で json モジュールを用いて JSON の読み込み／書き込みを行う方法について解説します。 Python における JSON データの利用 Python で JSON 形式のデータを読み込み／書き込みを [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Python で <span class="jinr-d--text-color d--marker1 d--bold"><code>json</code> モジュールを用いて JSON の読み込み／書き込みを行う方法</span>について解説します。</p>



<h2 class="wp-block-heading jinr-heading d--bold">Python における JSON データの利用</h2>



<p class="wp-block-paragraph">Python で JSON 形式のデータを読み込み／書き込みをする場合には、<span class="jinr-d--text-color d--marker1 d--bold"><code>json</code></span> モジュールを使用します。JSON とは「JavaScript Object Notation」の略で、JavaScript のオブジェクトの書き方を元にしたデータ定義方法になっています。</p>



<p class="wp-block-paragraph">JavaScript で使われることを想定して定義されたものですが、Python を含めて、幅広い言語で使用ができ、Web のREST API におけるデータのやり取りのためのデータ構造や設定ファイルの管理方法としても使用されます。</p>



<p class="wp-block-paragraph">この記事では、<span class="jinr-d--text-color d--marker1 d--bold"><code>json</code> モジュールを使って JSON データを扱う方法</span>を紹介します。</p>



<section class="wp-block-jinr-blocks-iconbox b--jinr-block b--jinr-iconbox"><div class="d--simple-iconbox6 ">
			<i class="jif jin-ifont-v2books" aria-hidden="true"></i>
			<div class="a--jinr-iconbox">
<p class="wp-block-paragraph">設定ファイルの管理という観点では以下も参考にしてください。</p>



<ul class="wp-block-list jinr-list">
<li><a href="https://tech.nkhn37.net/python-configparser-basic/" target="_blank" rel="noreferrer noopener">configparserによるconfigファイル管理</a></li>



<li><a href="https://tech.nkhn37.net/python-yaml-basic/" target="_blank" rel="noreferrer noopener">PyYAMLでのYAMLファイル管理</a></li>



<li><a href="https://tech.nkhn37.net/python-tomllib-basic/" target="_blank" rel="noreferrer noopener">tomllibでTOMLファイルを読み込む方法</a></li>
</ul>
</div>
		</div></section>



<h2 class="wp-block-heading jinr-heading d--bold">JSON ファイルの読み込み／書き込み<br><code>dump</code>、<code>load</code></h2>



<p class="wp-block-paragraph"><code>json</code> モジュールで JSON 形式ファイルの読み込み／書き込みを行う場合は、<span class="jinr-d--text-color d--marker1 d--bold"><code>dump</code></span> 関数及び <span class="jinr-d--text-color d--marker1 d--bold"><code>load</code></span> 関数を使用します。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import json

# データを用意
data = {
    "data": [
        {"id": 1, "name": "Taro"},
        {"id": 2, "name": "Haruka"},
        {"id": 3, "name": "Sakura"},
    ]
}

# JSONファイルへの書き込み
with open("test.json", "w", encoding='utf-8') as f:
    json.dump(data, f)

# JSONファイルの読み込み
with open("test.json", "r", encoding='utf-8') as f:
    data_r = json.load(f)
    print(data_r)
    print(type(data_r))</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【test.jsonのファイルの中身】
{"data": [{"id": 1, "name": "Taro"}, {"id": 2, "name": "Haruka"}, {"id": 3, "name": "Sakura"}]}</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【実行結果】
{'data': [{'id': 1, 'name': 'Taro'}, {'id': 2, 'name': 'Haruka'}, {'id': 3, 'name': 'Sakura'}]}
&lt;class 'dict'></pre>



<p class="wp-block-paragraph">以降で上記例におけるポイントを説明していきます。</p>



<h3 class="wp-block-heading jinr-heading d--bold">JSON ファイルの書き込み <code>dump</code></h3>



<p class="wp-block-paragraph">JSON ファイルへの書き込みを行っている部分は以下の部分です。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># JSONファイルへの書き込み
with open("test.json", "w", encoding='utf-8') as f:
    json.dump(data, f)</pre>



<p class="wp-block-paragraph">JSON ファイルへ書き込みを行う場合には、<code>open</code> 関数で <code>.json</code> 拡張子のファイルを開きます。入力する辞書データ（<code>data</code>）とファイルオブジェクト（<code>f</code>）を <code>dump</code> 関数の引数に渡すことで JSON 形式でファイルを出力することができます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【test.jsonのファイルの中身】
{"data": [{"id": 1, "name": "Taro"}, {"id": 2, "name": "Haruka"}, {"id": 3, "name": "Sakura"}]}</pre>



<p class="wp-block-paragraph"><code>test.json</code> のファイルの中身を確認すると用意した辞書データと同じになっていることが分かります。</p>



<p class="wp-block-paragraph">JSON ではダブルクォーテーション（<code>"</code>）で文字列を囲むことが仕様となっています。そのため、Python 側でシングルクォーテーション（<code>'</code>）の文字列で辞書を作成していたとしても（<code>"</code>）で出力されます。</p>



<section class="wp-block-jinr-blocks-iconbox b--jinr-block b--jinr-iconbox"><div class="d--heading-iconbox1 ">
			<div class="a--heading-iconbox-title">
			<div class="a--iconbox-title-icon"><i class="jif jin-ifont-caution" aria-hidden="true"></i></div>
			<div class="a--iconbox-title-text">注意点</div>
			</div>
			<div class="a--jinr-iconbox">
<p class="wp-block-paragraph">なお、Python の辞書（<code>dict</code>）で扱えるデータがすべて JSON に変換できるわけではありません。JSON で表現できるのは基本的に「オブジェクト（<code>dict</code> 相当）」「配列（<code>list</code> 相当）」「文字列」「数値」「真偽値」「null（<code>None</code> 相当）」といった型に限られます。</p>



<p class="wp-block-paragraph">そのため、<code>datetime</code> や <code>set</code>、<code>bytes</code> などの JSON にない型を含むデータを <code>dump</code> するとエラーとなるため注意が必要です。これらの型に対応するには後述する <code>default</code> 引数を活用します。</p>
</div>
		</div></section>



<h3 class="wp-block-heading jinr-heading d--bold">JSON ファイルの読み込み <code>load</code></h3>



<p class="wp-block-paragraph">JSON の読み込みを行っているのは以下の部分です。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># JSONファイルの読み込み
with open("test.json", "r", encoding='utf-8') as f:
    data_r = json.load(f)
    print(data_r)
    print(type(data_r))</pre>



<p class="wp-block-paragraph">データを読み込む際には、<code>load</code> 関数を使用します。上記の例では <code>data_r</code> にデータを読み込んで出力しています。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【実行結果】
{'data': [{'id': 1, 'name': 'Taro'}, {'id': 2, 'name': 'Haruka'}, {'id': 3, 'name': 'Sakura'}]}
&lt;class 'dict'></pre>



<p class="wp-block-paragraph">実行結果を見ると辞書形式で読み込みがされていることが分かります。</p>



<h2 class="wp-block-heading jinr-heading d--bold">Python 辞書と JSON 形式文字列間の変換<br><code>dumps</code>、<code>loads</code></h2>



<p class="wp-block-paragraph">上記では、JSON 形式のファイルの読み込み／書き込みについて紹介しました。ここでは、プログラム内で Python 辞書と JSON 形式文字列を変換する例を見ていきます。</p>



<p class="wp-block-paragraph">Python 辞書と JSON 形式文字列を変換する際には、<span class="jinr-d--text-color d--marker1 d--bold"><code>dumps</code></span> 関数と <span class="jinr-d--text-color d--marker1 d--bold"><code>loads</code></span> 関数を使用します。ファイルの読み込み／書き込み時との違いは「<span class="jinr-d--text-color d--marker2 d--bold"><code>s</code></span>」があるかないかの違いですので注意しましょう。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import json

# データを用意
data = {
    "data": [
        {"id": 1, "name": "Taro"},
        {"id": 2, "name": "Haruka"},
        {"id": 3, "name": "Sakura"},
    ]
}

# JSON形式文字列への変換
json_data = json.dumps(data)
print(json_data)
print(type(json_data), "\n")

# JSON形式文字列を辞書へ変換
data_dic = json.loads(json_data)
print(data_dic)
print(type(data_dic))</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【実行結果】
{"data": [{"id": 1, "name": "Taro"}, {"id": 2, "name": "Haruka"}, {"id": 3, "name": "Sakura"}]}
&lt;class 'str'> 

{'data': [{'id': 1, 'name': 'Taro'}, {'id': 2, 'name': 'Haruka'}, {'id': 3, 'name': 'Sakura'}]}
&lt;class 'dict'></pre>



<p class="wp-block-paragraph">以降で上記例におけるポイントを説明していきます。</p>



<h3 class="wp-block-heading jinr-heading d--bold">Python 辞書 → JSON 形式文字列への変換 <code>dumps</code></h3>



<p class="wp-block-paragraph">Python 辞書を JSON 形式文字列に変換しているのは以下の部分です。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># JSON形式文字列への変換
json_data = json.dumps(data)
print(json_data)
print(type(json_data))</pre>



<p class="wp-block-paragraph">JSON 形式文字列へ変換する際には、辞書を <code>dumps</code> 関数の引数に渡します。<code>type</code> で型を確認していますが、<code>str</code> となっていることが分かります。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【実行結果抜粋】
{"data": [{"id": 1, "name": "Taro"}, {"id": 2, "name": "Haruka"}, {"id": 3, "name": "Sakura"}]}
&lt;class 'str'> </pre>



<h3 class="wp-block-heading jinr-heading d--bold">JSON 形式文字列 → Python辞書への変換 <code>loads</code></h3>



<p class="wp-block-paragraph">JSON 形式文字列を Python 辞書に変換しているのは以下の部分です。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># JSON形式文字列を辞書へ変換
data_dic = json.loads(json_data)
print(data_dic)
print(type(data_dic))</pre>



<p class="wp-block-paragraph">JSON 形式文字列を Python 辞書に変換するには、<code>loads</code> 関数に JSON 形式の文字列を渡します。<code>type</code> で型を確認していますが、<code>dict</code> となっていることが分かります。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【実行結果抜粋】
{'data': [{'id': 1, 'name': 'Taro'}, {'id': 2, 'name': 'Haruka'}, {'id': 3, 'name': 'Sakura'}]}
&lt;class 'dict'></pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading jinr-heading d--bold">よく使うオプション</h2>



<h3 class="wp-block-heading jinr-heading d--bold">日本語をそのまま出力する <code>ensure_ascii=False</code></h3>



<p class="wp-block-paragraph"><code>json.dump()</code> や <code>json.dumps()</code> で JSON を出力する場合、デフォルトでは、<code>ensure_ascii=True</code> が指定されています。この場合、日本語などの ASCII 以外の文字は <code>\uXXXX</code> の形式にエスケープされて出力されます。</p>



<p class="wp-block-paragraph">一方で、日本語をそのまま JSON に出力したい場合は、<span class="jinr-d--text-color d--marker1 d--bold"><code>ensure_ascii=False</code></span> を指定します。設定ファイルとして JSON で保存したい場合などで人が中身を確認する目的がある場合には、<code>ensure_ascii=False</code> の指定を推奨します。</p>



<p class="wp-block-paragraph">なお、<code>ensure_ascii</code> は JSON の書き込みや変換時の出力形式を制御するオプションであるため、<code>load</code> や <code>loads</code> の読み込み側では特に意識する必要はありません。</p>



<p class="wp-block-paragraph">以下は <code>json.dump()</code> の例です。なお、<code>json.dumps()</code> でも同様に引数指定ができます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import json

# データを用意（日本語を含む）
data = {
    "data": [
        {"id": 1, "name": "太郎"},
        {"id": 2, "name": "はるか"},
        {"id": 3, "name": "さくら"},
    ]
}

# JSON ファイルへの書き込み（デフォルト: ensure_ascii=True）
with open("test_ensure_ascii_true.json", "w", encoding="utf-8") as f:
    json.dump(data, f)

# JSON ファイルへの書き込み（ensure_ascii=False）
with open("test_ensure_ascii_false.json", "w", encoding="utf-8") as f:
    json.dump(data, f, ensure_ascii=False)</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【出力結果】
[ensure_ascii=True（デフォルト） の場合]
{"data": [{"id": 1, "name": "\u592a\u90ce"}, {"id": 2, "name": "\u306f\u308b\u304b"}, {"id": 3, "name": "\u3055\u304f\u3089"}]}

[ensure_ascii=False の場合]
{"data": [{"id": 1, "name": "太郎"}, {"id": 2, "name": "はるか"}, {"id": 3, "name": "さくら"}]}</pre>



<h3 class="wp-block-heading jinr-heading d--bold">見やすく整形して出力する <code>indent</code></h3>



<p class="wp-block-paragraph"><code>json.dump()</code> や <code>json.dumps()</code> で JSON を出力すると、デフォルトでは、改行やインデントがないため 1 行の文字列として出力されます。そのため、データ量が多い場合や、階層が深い場合には内容の確認が大変です。</p>



<p class="wp-block-paragraph">このような場合には、<span class="jinr-d--text-color d--marker1 d--bold"><code>indent</code></span> でインデント幅を数値指定すると JSON を改行とインデント付きの形式で整形して出力できます。</p>



<p class="wp-block-paragraph">設定ファイルとして人が目で見て内容を確認するといった場合には、<code>indent</code> 指定をすると非常に読みやすくなります。また、日本語を含む場合は、上記の <code>ensure_ascii=False</code> と組み合わせるのが最適です。</p>



<p class="wp-block-paragraph">以下は <code>json.dump()</code> の例です。なお、<code>json.dumps()</code> でも同様に引数指定ができます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import json

# データを用意
data = {
    "data": [
        {"id": 1, "name": "太郎"},
        {"id": 2, "name": "はるか"},
        {"id": 3, "name": "さくら"},
    ]
}

# JSON ファイルへの書き込み (デフォルト: indent=None)
with open("test_indent_none.json", "w", encoding="utf-8") as f:
    json.dump(data, f, ensure_ascii=False)

# JSON ファイルへの書き込み (indent=2)
with open("test_indent_2.json", "w", encoding="utf-8") as f:
    json.dump(data, f, ensure_ascii=False, indent=2)</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【出力結果】
[指定しない場合：デフォルトの indent=None]
{"data": [{"id": 1, "name": "太郎"}, {"id": 2, "name": "はるか"}, {"id": 3, "name": "さくら"}]}

[indent=2 の場合]
{
  "data": [
    {
      "id": 1,
      "name": "太郎"
    },
    {
      "id": 2,
      "name": "はるか"
    },
    {
      "id": 3,
      "name": "さくら"
    }
  ]
}</pre>



<p class="wp-block-paragraph">例では、<code>indent=2</code> でインデントを指定しています。これは、可読性と横幅のバランスがよく、JSON のインデント幅として一般的によく使われる設定です。</p>



<p class="wp-block-paragraph">結果としては、改行とインデントにより見やすくなっていることが分かります。なお、何も指定しない場合は、デフォルトの <code>indent=None</code> となります。</p>



<h3 class="wp-block-heading jinr-heading d--bold">変換できない型に対するデフォルト処理を指定する <code>default</code></h3>



<p class="wp-block-paragraph">上記の説明で少し触れましたが、<code>json.dump()</code> や <code>json.dumps()</code> では、<code>datetime</code> や <code>set</code>、<code>bytes</code> などの JSON にない型を含むデータを <code>dump</code> するとエラーとなります。例えば、以下のような辞書を変換しようとするとエラーとなります。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">data = {
    "id": 1,
    # datetime 型はそのままでは変換できない
    "created_at": datetime.datetime.now(),
    # set 型もそのままでは変換できない
    "tags": {"python", "json", "example"},
    # bytes 型もそのままでは変換できない
    "raw_data": b"binarydata",
}</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【エラー例】
TypeError: Object of type datetime is not JSON serializable</pre>



<p class="wp-block-paragraph">このような変換できない型のデータに対しては、デフォルト処理を指定する <code>default</code> 引数に変換処理の関数を指定することで対応することができます。</p>



<h4 class="wp-block-heading jinr-heading d--bold"><code>default</code> で文字列（<code>str</code>）に変換する方法</h4>



<p class="wp-block-paragraph">最も簡単な方法としては、<code>str</code> に通すことで文字列に変換してしまう方法です。以下のように <span class="jinr-d--text-color d--marker1 d--bold"><code>default=str</code></span> を指定することで文字列に変換することができます。</p>



<p class="wp-block-paragraph">以下は <code>json.dump()</code> の例です。なお、<code>json.dumps()</code> でも同様に引数指定ができます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import json
from datetime import datetime, timezone, timedelta

# データを用意
data = {
    "id": 1,
    # datetime 型はそのままでは変換できない
    "created_at": datetime.now(timezone(timedelta(hours=9))),
    # set 型もそのままでは変換できない
    "tags": {"python", "json", "example"},
    # bytes 型もそのままでは変換できない
    "raw_data": b"binarydata",
}

# JSON ファイルへの書き込み (変換できない型を文字列に変換)
with open("test_default.json", "w", encoding="utf-8") as f:
    json.dump(
        data,
        f,
        ensure_ascii=False,
        indent=2,
        # default 引数で変換できない型を文字列に変換
        default=str,
    )</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【出力結果】
{
  "id": 1,
  "created_at": "2026-01-29 06:18:43.076851+09:00",
  "tags": "{'example', 'json', 'python'}",
  "raw_data": "b'binarydata'"
}</pre>



<section class="wp-block-jinr-blocks-iconbox b--jinr-block b--jinr-iconbox"><div class="d--heading-iconbox1 ">
			<div class="a--heading-iconbox-title">
			<div class="a--iconbox-title-icon"><i class="jif jin-ifont-caution" aria-hidden="true"></i></div>
			<div class="a--iconbox-title-text">注意点</div>
			</div>
			<div class="a--jinr-iconbox">
<p class="wp-block-paragraph"><code>set</code> 型は順序を持たないため、<code>default=str</code> で文字列化すると要素の並び順は実行するたびに変わることがあります。</p>
</div>
		</div></section>



<h4 class="wp-block-heading jinr-heading d--bold"><code>default</code> で型ごとに処理を変えて変換する方法</h4>



<p class="wp-block-paragraph">上記の例では、すべてを <code>str</code> で変換したため、決まった形式にしか変更されません。しかし、実際にはより柔軟に変換を指定したくなることがあります。例えば、以下のように変えたいとします。（例のため、もちろん他の変換方法を考えても構いません）</p>



<section class="wp-block-jinr-blocks-simplebox b--jinr-block-container"><div class="b--jinr-block b--jinr-box d--simple-box1  "><div class="c--simple-box-inner">
<ul class="wp-block-list jinr-list">
<li><code>datetime</code>：日本時間の ISO 形式にしたい。</li>



<li><code>set</code>：リスト形式にしたい。</li>



<li><code>bytes</code>：base64 でエンコードしてから文字列にしたい。</li>
</ul>
</div></div></section>



<p class="wp-block-paragraph">このような場合には、以下の <code>default_serializer</code> のような変換のための関数を用意して、<code>default=default_serializer</code> のように引数に渡します。なお、関数自体を渡すため <code>()</code> は付けないように注意してください。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import base64
import json
from datetime import datetime, timezone, timedelta

# from zoneinfo import ZoneInfo


def default_serializer(obj):
    """変換できない型ごとに処理を分ける例"""

    if isinstance(obj, datetime):
        # datetime 型は ISO 形式の文字列に変換 (タイムゾーンを日本に設定)
        return obj.astimezone(timezone(timedelta(hours=9))).isoformat()

        # または ZoneInfo を使う場合 (ただし、pip install tzdata が必要な場合あり)
        # return obj.astimezone(ZoneInfo("Asia/Tokyo")).isoformat()

    elif isinstance(obj, set):
        # set 型はリストに変換
        return list(obj)

    elif isinstance(obj, bytes):
        # bytes 型は base64 エンコードして文字列に変換
        return base64.b64encode(obj).decode("utf-8")

    else:
        raise TypeError(f"Type {type(obj)} not serializable")


# データを用意
data = {
    "id": 1,
    # datetime 型はそのままでは変換できない
    "created_at": datetime.now(timezone(timedelta(hours=9))),
    # set 型もそのままでは変換できない
    "tags": {"python", "json", "example"},
    # bytes 型もそのままでは変換できない
    "raw_data": b"binarydata",
}

# JSON ファイルへの書き込み (変換できない型を文字列に変換)
with open("test_default_serializer.json", "w", encoding="utf-8") as f:
    json.dump(
        data,
        f,
        ensure_ascii=False,
        indent=2,
        # default 引数で変換できない型ごとに処理を分ける関数を指定
        default=default_serializer,
    )</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【出力結果】
{
  "id": 1,
  "created_at": "2026-01-29T06:19:07.000762+09:00",
  "tags": [
    "python",
    "json",
    "example"
  ],
  "raw_data": "YmluYXJ5ZGF0YQ=="
}</pre>



<p class="wp-block-paragraph">例では、<code>default_serializer</code> が受け取った引数のオブジェクト（<code>obj</code>）の型を <code>isinstance</code> で判定して処理を分岐し、変換した文字列を返却しています。</p>



<p class="wp-block-paragraph">それぞれの型に以下のような変換をして返却をしています。</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>型</th><th>変換方法の例</th></tr></thead><tbody><tr><td><code>datetime</code></td><td><code>obj.astimezone(timezone(timedelta(hours=9))).isoformat()</code><br>または<br><code>obj.astimezone(ZoneInfo("Asia/Tokyo")).isoformat()</code></td></tr><tr><td><code>set</code></td><td><code>list(obj)</code></td></tr><tr><td><code>bytes</code></td><td><code>base64.b64encode(obj).decode("utf-8")</code></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">上記は、1 例の変換です。必要な変換のための関数さえ用意すれば、上記以外にも必要な形式に柔軟に変更できます。</p>



<section class="wp-block-jinr-blocks-iconbox b--jinr-block b--jinr-iconbox"><div class="d--simple-iconbox5 ">
			<i class="jif jin-ifont-v2speaker" aria-hidden="true"></i>
			<div class="a--jinr-iconbox">
<p class="wp-block-paragraph"><code>datetime</code> の変換では、<code>ZoneInfo</code> を使う記載例も紹介していますが「<code>pip install tzdata</code>」が必要な場合あります。</p>
</div>
		</div></section>



<h2 class="wp-block-heading jinr-heading d--bold">まとめ</h2>



<p class="wp-block-paragraph">Python で <span class="jinr-d--text-color d--marker1 d--bold"><code>json</code> モジュールを用いて JSON の読み込み／書き込みを行う方法</span>について解説しました。</p>



<p class="wp-block-paragraph">JSON とは「JavaScript Object Notation」の略で、JavaScript のオブジェクトの書き方を元にしたデータ定義方法で、Web のREST API におけるデータのやり取りのためのデータ構造や設定ファイルの管理方法としても使用されます。</p>



<p class="wp-block-paragraph">この記事では、<code>dump</code>、<code>load</code>、<code>dumps</code>、<code>loads</code> といった基本的な関数の使い方を例を使って紹介しています。また、実務でよく使うオプションとして各種便利な引数について、説明しました。</p>



<p class="wp-block-paragraph">JSON は、プログラム開発でよく使用するデータ形式です。ぜひ <code>json</code> モジュールの使い方を覚えて、うまく使いこなしてもらえたらと思います。</p>



<section class="wp-block-jinr-blocks-iconbox b--jinr-block b--jinr-iconbox"><div class="d--simple-iconbox6 ">
			<i class="jif jin-ifont-v2books" aria-hidden="true"></i>
			<div class="a--jinr-iconbox">
<p class="wp-block-paragraph"><code>json</code> の公式ドキュメントは<a href="https://docs.python.org/ja/3/library/json.html" target="_blank" rel="noreferrer noopener">こちら</a>を参照してください。</p>
</div>
		</div></section>



<section class="wp-block-jinr-blocks-simplebox b--jinr-block-container"><div class="b--jinr-block b--jinr-box d--heading-box8  "><div class="a--simple-box-title d--bold">ソースコード</div><div class="c--simple-box-inner">
<p class="wp-block-paragraph">上記で紹介しているソースコードについては <a href="https://github.com/nkhn37/python-tech-sample-source/tree/main/python-libraries/json" target="_blank" rel="noreferrer noopener">GitHub</a> にて公開しています。参考にしていただければと思います。</p>
</div></div></section>


<section class="b--jinr-block b--jinr-blogcard d--blogcard-hover-up d--blogcard-style1 d--blogcard-mysite t--round "><div class="a--blogcard-label ef">あわせて読みたい</div><a class="o--blogcard-link t--round" href="https://tech.nkhn37.net/python-tech-summary-page/"><div class="c--blogcard-image"><img decoding="async" class="a--blogcard-img-src" width="128" height="72" src="https://tech.nkhn37.net/wp-content/uploads/2024/08/Python-Tech-Pythonプログラミングガイド_new1-640x360.jpg" alt="【Python Tech】プログラミングガイド" /></div><div class="a--blogcard-title d--bold">【Python Tech】プログラミングガイド</div></a></section>


<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://tech.nkhn37.net/python-json-dump-load/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【Python】PyYAMLでのYAMLファイル管理</title>
		<link>https://tech.nkhn37.net/python-yaml-basic/</link>
					<comments>https://tech.nkhn37.net/python-yaml-basic/#respond</comments>
		
		<dc:creator><![CDATA[naoki-hn]]></dc:creator>
		<pubDate>Tue, 23 Mar 2021 00:00:00 +0000</pubDate>
				<category><![CDATA[yaml]]></category>
		<category><![CDATA[dump]]></category>
		<category><![CDATA[load]]></category>
		<category><![CDATA[Loader]]></category>
		<category><![CDATA[PyYAML]]></category>
		<category><![CDATA[SafeLoader]]></category>
		<category><![CDATA[safe_load]]></category>
		<guid isPermaLink="false">https://tech.nkhn37.net/?p=1329</guid>

					<description><![CDATA[Python で YAML ファイルの管理をする際に使用する PyYAML の基本的な使い方について解説します。 PyYAML での YAML ファイル管理 YAML ファイルは、YAML Ain&#8217;t Mar [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Python で <span class="jinr-d--text-color d--marker1 d--bold">YAML</span> ファイルの管理をする際に使用する <span class="jinr-d--text-color d--marker1 d--bold">PyYAML</span> の基本的な使い方について解説します。</p>



<h2 class="wp-block-heading jinr-heading d--bold" id="yamlファイルの管理">PyYAML での YAML ファイル管理</h2>



<p class="wp-block-paragraph"><span class="jinr-d--text-color d--marker1 d--bold">YAML</span> ファイルは、<strong>YAML Ain&#8217;t Markup Language</strong> ファイルのことで、XML や JSON と同じように構造化されたデータを表現するためのフォーマットです。</p>



<p class="wp-block-paragraph">拡張子は「<code>.yml</code>」または「<code>.yaml</code>」です。正式な拡張子としては <code>.yaml</code> ですが、拡張子は一般的に 3 文字のものが多く使われるため <code>.yml</code> が使用されることが多いです。</p>



<p class="wp-block-paragraph">YAML ファイルの簡単な例は以下になります。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">DB_SERVER:
  HOST: 192.168.1.200
  PORT: 3306
WEB_SERVER:
  HOST: 192.168.1.100
  PORT: 80</pre>



<p class="wp-block-paragraph">YAML ファイルでは、「<code>キー: 値</code>」の形式になっており、例では、<code>DB_SERVER</code> というキーの下には、<code>HOST</code> と <code>PORT</code> の情報を持っており、それぞれの値が何であるのかというような階層構造を簡単に表現できます。また、YAML ではインデントを使ってデータの階層構造を表し、XML のような終了タグもないので、書きやすくかつ読みやすいです。</p>



<p class="wp-block-paragraph">YAML は各種設定ファイル、ログ、データ保存など色々な用途で使用されます。Python でYAMLファイルを扱う場合には、<span class="jinr-d--text-color d--marker1 d--bold">PyYAML</span> というライブラリを使用します。</p>



<p class="wp-block-paragraph">この記事では、PyYAML を使って YAML ファイルを扱う方法を紹介します。</p>



<section class="wp-block-jinr-blocks-iconbox b--jinr-block b--jinr-iconbox"><div class="d--simple-iconbox6 ">
			<i class="jif jin-ifont-v2books" aria-hidden="true"></i>
			<div class="a--jinr-iconbox">
<p class="wp-block-paragraph">Python の設定ファイル管理では、TOML や INI ファイルもよく使用されます。以下も参考にしてください。</p>



<ul class="wp-block-list jinr-list">
<li><a href="https://tech.nkhn37.net/python-tomllib-basic/" target="_blank" rel="noreferrer noopener">tomllibでTOMLファイルを読み込む方法</a></li>



<li><a href="https://tech.nkhn37.net/python-configparser-basic/" target="_blank" rel="noreferrer noopener">configparserによる設定ファイル管理</a></li>
</ul>
</div>
		</div></section>



<h3 class="wp-block-heading jinr-heading d--bold">PyYAML のインストール</h3>



<p class="wp-block-paragraph">PyYAML を使用するにはインストールが必要です。以下のように pip でインストールをしてください。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""> pip install pyyaml</pre>



<h3 class="wp-block-heading jinr-heading d--bold" id="pyyamlによるyamlファイル管理の基本的な使い方">PyYAML の基本的な使い方</h3>



<p class="wp-block-paragraph">PyYAML の基本的な使い方を以降で紹介します。なお、PyYAML のバージョンは記事更新時点の <span class="jinr-d--text-color d--marker1 d--bold">PyYAML 6.0</span> で確認をしています。バージョンによっては挙動が異なる場合があることはあらかじめご了承ください。</p>



<p class="wp-block-paragraph">PyYAML を用いて YAML ファイルの入出力をする場合には、以下のようにします。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import yaml

yaml_data = {
    "WEB_SERVER": {"HOST": "192.168.1.100", "PORT": 80},
    "DB_SERVER": {"HOST": "192.168.1.200", "PORT": 3306},
}

# YAMLファイルの書き込み
with open("config.yml", "w") as yml_file:
    # 書き込み
    yaml.dump(yaml_data, yml_file)

# YAMLファイルの読み込み
with open("config.yml", "r") as yml_file1:
    # 読み込み
    load_data = yaml.load(yml_file1, Loader=yaml.SafeLoader)

print(type(load_data))
# 読み込んだ結果の参照
print(load_data["WEB_SERVER"])
print(load_data["WEB_SERVER"]["HOST"])
print(load_data["WEB_SERVER"]["PORT"])
print(load_data["DB_SERVER"])
print(load_data["DB_SERVER"]["HOST"])
print(load_data["DB_SERVER"]["PORT"])</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【実行結果】
&lt;class 'dict'>
{'HOST': '192.168.1.100', 'PORT': 80}
192.168.1.100
80
{'HOST': '192.168.1.200', 'PORT': 3306}
192.168.1.200
3306</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【出力結果ファイル config.yml の内容】
DB_SERVER:
  HOST: 192.168.1.200
  PORT: 3306
WEB_SERVER:
  HOST: 192.168.1.100
  PORT: 80</pre>



<p class="wp-block-paragraph">例では、YAML ファイルに書き込む辞書データを用意し YAML ファイルの <code>config.yml</code> へ書き込みします。その後、書き込んだ YAML ファイルを読み込んで表示しています。</p>



<h4 class="wp-block-heading jinr-heading d--bold" id="yamlファイルの設定と書き込み">YAML ファイルの書き込み</h4>



<p class="wp-block-paragraph">PyYAML を用いてファイルを書き込む場合には以下のようにします。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import yaml

yaml_data = {
    "WEB_SERVER": {"HOST": "192.168.1.100", "PORT": 80},
    "DB_SERVER": {"HOST": "192.168.1.200", "PORT": 3306},
}

# YAMLファイルの書き込み
with open("config.yml", "w") as yml_file:
    # 書き込み
    yaml.dump(yaml_data, yml_file)</pre>



<p class="wp-block-paragraph">まず、PyYAML を使用するには <code>yaml</code> をインポートします。</p>



<p class="wp-block-paragraph">書き込むデータは辞書形式で用意し、YAML ファイルへの書き込みを行う場合には、<span class="jinr-d--text-color d--marker1 d--bold"><code>dump</code></span> 関数に書き込み対象の辞書を渡して書き込みを行います。</p>



<h4 class="wp-block-heading jinr-heading d--bold" id="yamlファイルの読み込み">YAML ファイルの読み込み</h4>



<p class="wp-block-paragraph">PyYAML でファイルを読み込む場合には以下のようにします。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># YAMLファイルの読み込み
with open("config.yml", "r") as yml_file1:
    # 読み込み
    load_data = yaml.load(yml_file1, Loader=yaml.SafeLoader)</pre>



<p class="wp-block-paragraph">YAML ファイルの読み込みを行う場合には、<span class="jinr-d--text-color d--marker1 d--bold"><code>load</code></span> 関数を使用します。<code>load</code> 関数にはファイルオブジェクトと <span class="jinr-d--text-color d--marker1 d--bold"><code>Loader</code></span> 引数で読み込み用のローダーを指定します。例では、<span class="jinr-d--text-color d--marker1 d--bold"><code>yaml.SafeLoader</code></span> を指定しています。</p>



<p class="wp-block-paragraph">なお、<code>Loader=yaml.SafeLoader</code> を省略した <span class="jinr-d--text-color d--marker1 d--bold"><code>safe_load</code></span> 関数を <code>load</code> 関数の代わりに使っても構いません。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># YAMLファイルの読み込み
with open("config.yml", "r") as yml_file1:
    # 読み込み
    load_data = yaml.safe_load(yml_file1)</pre>



<p class="wp-block-paragraph">なお、<code>Loader</code> には種類がありますが、<code>SafeLoader</code> は信頼できないデータソースを読み込みで推奨されるものです。基本こちらを使用するでよいかと思います。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">print(type(load_data))
# 読み込んだ結果の参照
print(load_data["WEB_SERVER"])
print(load_data["WEB_SERVER"]["HOST"])
print(load_data["WEB_SERVER"]["PORT"])
print(load_data["DB_SERVER"])
print(load_data["DB_SERVER"]["HOST"])
print(load_data["DB_SERVER"]["PORT"])</pre>



<p class="wp-block-paragraph">上記部分で読み込んだデータを確認していますが、<code>load</code> 関数では Python の辞書として読み込みが行われるため、簡単に設定情報にアクセスすることが可能です。</p>



<section class="wp-block-jinr-blocks-iconbox b--jinr-block b--jinr-iconbox"><div class="d--simple-iconbox5 ">
			<i class="jif jin-ifont-v2speaker" aria-hidden="true"></i>
			<div class="a--jinr-iconbox">
<p class="wp-block-paragraph">PyYAML 5.1 より前のバージョンであれば <code>yaml.load(yml_file)</code> のように YAML ファイルの読み込みが可能でしたがセキュリティ上の理由から非推奨となり、5.1以降では <code>Loader</code> 引数の設定をしないと警告が表示されます。</p>



<p class="wp-block-paragraph">また、PyYAML 6.0 では、<code>Loader</code> 引数の指定は必須となっており、指定しない場合はエラーとなります。</p>
</div>
		</div></section>



<h2 class="wp-block-heading jinr-heading d--bold">まとめ</h2>



<p class="wp-block-paragraph">Python で <span class="jinr-d--text-color d--marker1 d--bold">YAML</span> ファイルの管理をする際に使用する <span class="jinr-d--text-color d--marker1 d--bold">PyYAML</span> の基本的な使い方について解説しました。</p>



<p class="wp-block-paragraph">YAML は各種設定ファイル、ログ、データ保存等いろいろな用途で使用できます。PyYAML の使い方を覚えて YAML ファイルを有効活用してください。</p>



<section class="wp-block-jinr-blocks-iconbox b--jinr-block b--jinr-iconbox"><div class="d--simple-iconbox6 ">
			<i class="jif jin-ifont-v2books" aria-hidden="true"></i>
			<div class="a--jinr-iconbox">
<p class="wp-block-paragraph">PyYaml の公式ドキュメントは<a href="https://pyyaml.org/wiki/PyYAMLDocumentation" target="_blank" rel="noreferrer noopener">こちら</a>を参照してください。</p>
</div>
		</div></section>



<section class="wp-block-jinr-blocks-simplebox b--jinr-block-container"><div class="b--jinr-block b--jinr-box d--heading-box8  "><div class="a--simple-box-title d--bold">ソースコード</div><div class="c--simple-box-inner">
<p class="wp-block-paragraph">上記で紹介しているソースコードについては <a href="https://github.com/nkhn37/python-tech-sample-source/tree/main/python-libraries/yaml" target="_blank" rel="noreferrer noopener">GitHub</a> にて公開しています。参考にしていただければと思います。</p>
</div></div></section>


<section class="b--jinr-block b--jinr-blogcard d--blogcard-hover-up d--blogcard-style1 d--blogcard-mysite t--round "><div class="a--blogcard-label ef">あわせて読みたい</div><a class="o--blogcard-link t--round" href="https://tech.nkhn37.net/python-tech-summary-page/"><div class="c--blogcard-image"><img decoding="async" class="a--blogcard-img-src" width="128" height="72" src="https://tech.nkhn37.net/wp-content/uploads/2024/08/Python-Tech-Pythonプログラミングガイド_new1-640x360.jpg" alt="【Python Tech】プログラミングガイド" /></div><div class="a--blogcard-title d--bold">【Python Tech】プログラミングガイド</div></a></section>]]></content:encoded>
					
					<wfw:commentRss>https://tech.nkhn37.net/python-yaml-basic/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Disk: Enhanced  を使用したページ キャッシュ

Served from: tech.nkhn37.net @ 2026-07-04 09:19:51 by W3 Total Cache
-->