はじめに
JSON(JavaScript Object Notation)は、設定ファイルや API 通信で広く使われている軽量なデータ交換形式です。
シェルツールはプレーンテキストの処理には適していますが、JSON のような構造化形式は、通常、Python の組み込みライブラリを使って操作するほうが簡単で安全です。
この実験では、アプリケーションの設定を更新する開発者として作業します。JSON 設定ファイルを作成し、それを読み込む Python スクリプトを記述して設定を変更し、変更内容を新しいファイルに保存します。
サンプルデータを作成する
このステップでは、サンプルの JSON 設定ファイルを作成します。このファイルは、アプリケーション名、バージョン、デバッグモード、接続数の上限をキーとして持つ、一般的なソフトウェアアプリケーションの設定ファイルを再現したものです。
まず、正しい作業ディレクトリにいることを確認します。
JSON は、現代の運用で最も一般的な構造化データ形式の 1 つです。API、クラウドツール、多くの設定システムで使われているためです。JSON をプレーンテキストとして扱うのではなく、安全に読み取り、変更する方法を学ぶことは、非常に重要です。
cd ~/project
次に、nano などのテキストエディターを使って、config.json というファイルを作成します。
nano config.json
次の内容をファイルに貼り付けます。この JSON オブジェクトには、ブール値(false)、整数(100)、文字列が含まれています。
{
"appName": "SuperApp",
"version": "1.0.0",
"debug": false,
"maxConnections": 100
}
nano で保存して終了するには、次の操作を行います。
変更内容を書き込むために Ctrl + O を押し、続けて Enter を押してファイル名を確定します。その後、Ctrl + X を押してエディターを終了します。
cat コマンドを使って、ファイルの内容を確認できます。
cat config.json
JSON の内容がターミナルに表示されれば成功です。
JSON を読み取る
このステップでは、config.json ファイルを読み取る Python スクリプトを作成します。Python の json モジュールは、JSON データを Python の辞書に変換します。
ここで、Python は基本的なシェルスクリプトより明確な利点を持ちます。正規表現でテキストを検索し、構造が単純なままであることを期待する代わりに、Python は JSON のルールに従ってファイルを解析し、実際のデータ型として扱えるデータを提供します。
json.load() は、配送用の箱を「開梱する」処理だと考えてください。ファイルに保存されたテキスト(箱)を受け取り、コードから簡単に利用・変更できる Python の辞書(中身)に変換します。
parse_json.py という新しい Python スクリプトを作成します。
nano parse_json.py
次のコードをファイルに追加します。このスクリプトは、json モジュールをインポートし、設定ファイルを開いてデータを読み込みます。
import json
## Open the JSON file
with open('config.json', 'r') as file:
## Load the data into a Python dictionary
data = json.load(file)
## Print the data to verify it was loaded correctly
print("Current Configuration:")
print(data)
print(f"Type of data: {type(data)}")
nano を保存して終了します(Ctrl+O、Enter、Ctrl+X)。
次に、スクリプトを実行して出力を確認します。
python3 parse_json.py
コンソールに辞書が表示されれば、Python が JSON ファイルを正常に解析できたことを確認できます。
データを変更する
このステップでは、Python スクリプト内で読み込んだデータを変更します。json.load() はデータを標準的な Python の辞書に変換するため、ほかの辞書と同じように値を変更できます。
ここでは、データ型の変換も確認できます。JSON の true と false は、Python の True と False に変換されます。数値は単なる文字列ではなく、数値のまま保持されます。そのため、後続の比較や計算をより安全に行えます。
もう一度 parse_json.py を開いて編集します。
nano parse_json.py
debug キーの値を、JSON の false に対応する False から True に変更します。データを読み込んだ後、表示する前に変更処理を追加してください。
コードを次のように更新します。
import json
with open('config.json', 'r') as file:
data = json.load(file)
print("Original Debug Status:", data['debug'])
## Modify the value
data['debug'] = True
print("Updated Debug Status:", data['debug'])
nano を保存して終了します。
もう一度スクリプトを実行し、メモリ上の変更を確認します。
python3 parse_json.py
出力に、元の状態が False、更新後の状態が True と表示されれば成功です。ただし、この変更は現在 Python プログラムのメモリ上に存在するだけで、まだファイルには保存されていません。
変更を保存する
このステップでは、変更した辞書を新しい JSON ファイルに保存します。保存には json.dump() 関数を使用します。
この「読み取り、変更、書き込み」のサイクルは、自動化で非常によく使われるパターンです。スクリプトで構造化データを読み込み、意図したフィールドだけを変更し、有効な JSON として書き出します。ファイル構造が複雑になった場合、行単位で編集するよりもはるかに信頼性が高い方法です。
json.dump() は、箱を「梱包する」処理だと考えてください。Python の辞書(中身)をテキスト形式(封をした箱)に戻し、ファイルに保存できるようにします。テスト中に元の設定を上書きしないよう、new_config.json などの新しいファイルに保存するのがよい方法です。
最後にもう一度 parse_json.py を開きます。
nano parse_json.py
data 辞書を new_config.json というファイルに書き込むコードを追加します。indent=4 パラメーターを使用して、出力ファイルを人間が読みやすい形式(pretty-printed)にします。
完成したスクリプトは次のようになります。
import json
## 1. Read the original file
with open('config.json', 'r') as file:
data = json.load(file)
## 2. Modify the data
data['debug'] = True
## 3. Write to a new file
with open('new_config.json', 'w') as file:
json.dump(data, file, indent=4)
print("Configuration updated and saved to new_config.json")
nano を保存して終了します。
スクリプトを実行して、読み取り、変更、書き込みの処理を行います。
python3 parse_json.py
成功すると、スクリプトに確認メッセージが表示されます。
結果を確認する
このステップでは、新しい設定ファイルが作成され、更新された値が含まれていることを確認します。
構造化ファイルでは、構文上はスクリプトが成功していても、論理的には誤った内容が生成される可能性があります。そのため、結果を読み戻して、ファイルが作成されたこととデータが正しく変更されたことの両方を確認することが重要です。
ディレクトリ内のファイルを一覧表示し、new_config.json が存在することを確認します。
ls -l
次に、新しいファイルの内容を表示します。
cat new_config.json
次のような出力が表示されます。
{
"appName": "SuperApp",
"version": "1.0.0",
"debug": true,
"maxConnections": 100
}
"debug" が true になっていることを確認してください。
diff コマンドを使って元のファイルと新しいファイルを比較し、正確な変更箇所を確認することもできます。
diff config.json new_config.json
出力には、debug 行の違いが示されます。
まとめ
この実験では、Python を使って JSON データを扱う方法を学びました。まず、JSON の設定ファイルを作成し、そのファイルを辞書に解析する Python スクリプトを記述しました。次に、プログラムからデータを変更し、更新した構造を新しい JSON ファイルに保存しました。
この「読み取り、変更、書き込み」という流れは、自動化や DevOps のスクリプトで基本となるパターンです。Bash はコマンドの実行に適していますが、Python は JSON のような構造化データを扱えるため、複雑な設定や API データを管理する強力なツールになります。



