Python - JSON: PythonでのJSON処理入門ガイド

こんにちは、将来のPythonのマエストロ!今日、私たちはPythonのJSONの世界についての興味深い旅に出かけます。プログラミングに初めての人でも心配しないでください – 私があなたの友好的なガイドで、ステップバイステップに進んでいきます。このチュートリアルの最後には、JSONをプロのように扱えるようになるでしょう!

Python - 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