Python - JSON: PythonでのJSON処理入門ガイド
こんにちは、将来のPythonのマエストロ!今日、私たちはPythonのJSONの世界についての興味深い旅に出かけます。プログラミングに初めての人でも心配しないでください – 私があなたの友好的なガイドで、ステップバイステップに進んでいきます。このチュートリアルの最後には、JSONをプロのように扱えるようになるでしょう!
PythonでのJSON
JSONとは?
JSON、すなわちJavaScript Object Notationは、軽量なデータ交換フォーマットです。それはデータを保存し、運輸する方法として考えてください – 別のプログラムすべてが理解できるユニバーサルな言語のようなものです。人間が読める(私たちには素晴らしい!)し、機械がパースし、生成しやすいです。
プログラミングの世界では、JSONはみんなが一緒にいたいクールな子供のようです。Web APIから設定ファイルに至るまで、どこでも使われています。そのため、PythonでJSONを扱うことは非常に重要なスキルです!
PythonでJSONを使う理由は?
PythonとJSONは、ピーナッツバターとジェリーのように – とてもよくとなります!Pythonには、json
モジュールを通じてJSONに対する組み込みサポートがあります。これは、PythonオブジェクトをJSONに簡単に変換し、その逆も可能であることを意味します。
まず、JSONモジュールをインポートしましょう:
import json
簡単でしょ?今、私たちはjuicyな部分に飛び込む準備ができています!
JSONのシリアライズ
シリアライズは、PythonオブジェクトをJSON文字列に変換するための花の名前です。それは、Pythonを他のプログラムが理解できる言語に翻訳するのに似ています。
基本的なシリアライズ
まず、シンプルなPython辞書を始めます:
my_dict = {
"name": "Alice",
"age": 30,
"city": "Wonderland"
}
json_string = json.dumps(my_dict)
print(json_string)
出力:
{"name": "Alice", "age": 30, "city": "Wonderland"}
ここで、json.dumps()
は私たちのPython辞書を取り出し、JSON文字列に変換します。それは魔法のようですが、実際にはコードです!
プリティプリント
時々、私たちはJSONを見栄え良く読めるようにしたいです。そんなときにプリティプリントが役に立ちます:
pretty_json = json.dumps(my_dict, indent=4)
print(pretty_json)
出力:
{
"name": "Alice",
"age": 30,
"city": "Wonderland"
}
indent=4
パラメータは、Pythonに4スペースのインデントを追加するよう指示し、私たちのJSONをきれいに整えます。
JSONをファイルに書き込む
しばしば、私たちはJSONデータをファイルに保存したいです。その方法はこうです:
with open('data.json', 'w') as file:
json.dump(my_dict, file, indent=4)
これは、data.json
という名前のファイルを作成し、私たちのプリティプリントされたJSONを書き込みます。それはデータの保存としてテキストメッセージを保存するのに似ています!
JSONのデシリアライズ
デシリアライズは逆のプロセスです – JSON文字列を再びPythonオブジェクトに変換します。それは、そのユニバーサルな言語を再びPythonに翻訳するのに似ています。
基本的なデシリアライズ
まず、JSON文字列を始めます:
json_string = '{"name": "Bob", "age": 25, "city": "Neverland"}'
python_dict = json.loads(json_string)
print(python_dict)
print(type(python_dict))
出力:
{'name': 'Bob', 'age': 25, 'city': 'Neverland'}
<class 'dict'>
json.loads()
は私たちのJSON文字列を取り出し、再びPython辞書に変換します。それは魔法の逆効果のようです!
ファイルからJSONを読み取る
先ほど作成したファイルを覚えていますか?それを再び読み取りましょう:
with open('data.json', 'r') as file:
loaded_data = json.load(file)
print(loaded_data)
これは、ファイルからJSONデータを読み取り、再びPythonオブジェクトに変換します。それは保存したテキストメッセージを開き、読むのに似ています!
高度なJSON処理
基本的な部分をカバーしたので、もっと高度な技術を見ていきましょう。
複雑なデータ型の処理
JSONは素晴らしいですが、ネイティブに理解できるデータ型はわずかです。以下は、Pythonの型がどのようにJSONの型にマッピングされるかの表です:
Python Type | JSON Type |
---|---|
dict | object |
list, tuple | array |
str | string |
int, float | number |
True | true |
False | false |
None | null |
しかし、datetimeオブジェクトのようなもっと複雑な型はどうでしょうか?そんな場合にカスタムエンコーディングが役立ちます!
JSONEncoderクラス
JSONEncoder
クラスは、JSONがネイティブにサポートしていないPythonオブジェクトに対してカスタムエンコーディングを定義することができます。
以下は、datetimeオブジェクトの例です:
from datetime import datetime
class DateTimeEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, datetime):
return obj.isoformat()
return super().default(obj)
data = {
"name": "Charlie",
"birthday": datetime(1990, 5, 15)
}
json_string = json.dumps(data, cls=DateTimeEncoder)
print(json_string)
出力:
{"name": "Charlie", "birthday": "1990-05-15T00:00:00"}
私たちのカスタムエンコーダは、datetimeオブジェクトをISO形式の文字列に変換し、JSONが処理できます。
JSONDecoderクラス
同様に、JSONDecoder
クラスは、JSONがどのようにしてPythonオブジェクトにデコードされるかをカスタマイズすることができます。
以下は、ISO形式の文字列を再びdatetimeオブジェクトに変換する例です:
import dateutil.parser
class DateTimeDecoder(json.JSONDecoder):
def __init__(self, *args, **kwargs):
json.JSONDecoder.__init__(self, object_hook=self.object_hook, *args, **kwargs)
def object_hook(self, obj):
for key, value in obj.items():
if isinstance(value, str):
try:
obj[key] = dateutil.parser.parse(value)
except ValueError:
pass
return obj
json_string = '{"name": "Charlie", "birthday": "1990-05-15T00:00:00"}'
decoded_data = json.loads(json_string, cls=DateTimeDecoder)
print(decoded_data)
print(type(decoded_data['birthday']))
出力:
{'name': 'Charlie', 'birthday': datetime.datetime(1990, 5, 15, 0, 0)}
<class 'datetime.datetime'>
私たちのカスタムデコーダは、ISO形式の文字列を認識し、再びdatetimeオブジェクトに変換します。
それでは、皆さん!私たちはPythonでのJSONの世界を旅しました、基本的なシリアライズとデシリアライズから、カスタムエンコーダとデコーダの高度な領域まで。覚えておいてください、練習は完璧を作り出しますので、これらの概念を実験することを恐れないでください。
JSONはPythonの一部として小さな部分かもしれませんが、今日のデータ駆動型の世界では非常に重要なスキルです。ウェブアプリケーションを構築している、APIを使っている、データを分析している場合でも、新しく学んだJSONスキルは大いに役立ちます。
コーディングを続け、学び続け、そして最も重要なのは、Pythonで楽しむことを忘れないでください!
Credits: Image by storyset