marshmallowライブラリのdata_keyオプションってどう使うんですか?
marshmallowでschemaを読み込んだ際に
別名の key を定義するために使われるぞ。
✔️ 本記事のテーマ
marshmallowライブラリのdata_keyについて
✔️ 読者さんへの前置きメッセージ
本記事は「marshmallowライブラリのdata_keyオプション」について書いています。
この記事を読むことで
「marshmallowでschemaを読み込んだ際に別名の key を使う方法」
について理解できます。
marshmallowはschema定義用のPythonライブラリです。
marshmallowライブラリではdata_keyオプションを使うことで、
schemaを読み込んだときにプログラム内で別名の key を使用することができます。
本記事では、そんなmarshmallowのdata_keyオプションについて解説していきます。
それでは、解説していきましょう。
marshmallowのdata_keyオプションの使い方
一言で説明すると、
JSONを読み込んだ時に 別名の key をプログラム内で使うための定義です。
data_keyオプションによって
JSONとは別の key でプログラム内で扱うことができます。
どういうことかコードで説明しましょう。
from marshmallow import Schema, fields
class ParsonSchema(Schema):
name = fields.Str()
age = fields.Int()
このschemaは name age という2項目をschemaとしてデータを読み込みます。
このようなschemaを定義することで、次のJSONを読み込むことができます。
data = ParsonSchema().load({"name": "Taro", "age": 20})
print(data)
# {'name': 'Taro', 'age': 20}
ここまでは通常のmarshmallowによるschema定義です。
ここで、先ほどの schema 定義の name の オプションとして、
data_key による 別名キーの定義を加えてみます。
from marshmallow import Schema, fields
class ParsonSchema(Schema):
person_name = fields.Str(data_key="name")
age = fields.Int()
data = ParsonSchema().load({"name": "Taro", "age": 20})
print(data)
# {'age': 20, 'person_name': 'Taro'}
このようにJSONでは “name”: “Taro” と定義されているものを、
プログラム内では ‘person_name’: ‘Taro’ として扱っています。
このように、data_key オプションをつけることで、JSONとは別の key 名を使うことができます。
ちなみに、data_key オプションを外してこのコードを実行すると、
以下のように ValidationError が発生します。
marshmallow.exceptions.ValidationError: {'name': ['Unknown field.']}
marshmallowのdata_keyオプションの使い道
では、JSONとは別のkeyをプログラム内で使える、
data_key オプションはどのような使い道があるのでしょうか?
主に、Pythonの予約語などを使いたい場合に data_key オプションが役に立ちます。
例えば、以下のようなJSONを読み込みたい場合を考えてみましょう。
SAMPLE_JSON = {"name": "Taro", "age": 20, "class": "beginner"}
この場合、通常のschema定義では以下のようなコードになります。
from marshmallow import Schema, fields
class ParsonSchema(Schema):
person_name = fields.Str()
age = fields.Int()
class = fields.Str()
ただし、class は Python の予約語のため、変数名として使用できません。
このような、状況を解消するために、data_key オプションが使われます。
以下のように、data_key オプションで別名を定義することで、
先ほどのJSON を読み込むことができるようになります。
from marshmallow import Schema, fields
SAMPLE_JSON = {"name": "Taro", "age": 20, "class": "beginner"}
class ParsonSchema(Schema):
name = fields.Str()
age = fields.Int()
belong_class = fields.Str(data_key="class")
data = ParsonSchema().load({"name": "Taro", "age": 20, "class": "beginner"})
print(data)
# {'name': 'Taro', 'belong_class': 'beginner', 'age': 20}
marshmallow の data_key オプションはこのようなユースケースのおいて使用されます。
marshmallow(Pythonライブラリ)とは?
そもそもmarshmallowとは何なのでしょうか?
marshmallowはschema定義用のPythonライブラリです。
marshmallowを使うことで、
schemaを定義してPython型以外のデータ(例えば、JSONなど)を読み込むことができます。
marshmallowを使えば、
JSONの階層的なデータ構造をそのままPythonへ読み込むことができます。
marshmallowの具体的な使い方については
「marshmallowの使い方【Pythonライブラリ】」の記事で解説しています。
marshmallowの便利なオプション
marshmallowには便利ないくつかのオプションがあります。
- required
- allow_none
- missing
- validation
ざっと解説しましょう。
requiredオプション
対象項目を必須とするかどうかのオプションです。
Trueの場合、対象項目は必須となり、対象項目が存在しないデータを読み込むとerrorが発生します。
Falseの場合、対象項目が欠けていてもerrorになりません。
デフォルトではFalseになっています。
なお、requiredオプションの詳しい解説は
「marshmallowのrequiredオプションの使い方」の記事に書いています。
allow_noneオプション
null値を許可するかどうかのオプションです。
Trueの場合、nullを許可し、Falseの場合、nullが入ってきたらvalidation errorが発生させます。
デフォルトではFalseになっています。
なお、allow_noneオプションの詳しい解説は
「marshmallowのallow_noneオプションの使い方」の記事に書いています。
missingオプション
対象項目がなかった場合に、どのような値で埋めるかを指定するオプションです。
‘missing=0’ や ‘missing=None’ というように値を渡して使います。
なお、 ‘missing=True’ のとき、 ‘required=False’ でないと動かしたときerrorが発生します。
(当然といえば当然ですね)
なお、missingオプションの詳しい解説は
「marshmallowのmissingオプションの使い方」の記事に書いています。
validateオプション
データを読み込む際のValidationをつけるオプションです。
Validationの条件を指定します。
例えば、以下のように書くことで、dayは1~31の範囲の値のみ受け付けるようにしています。
day = fields.Int(validate=Range(min=1, max=31))
なお、validateオプションの詳しい解説は
「marshmallowのvalidateオプションの使い方」の記事に書いています。
marshmallowやPythonについてスキルをつけるなら
marshmallowの data_key オプションについて解説しました。
Pythonをでは、様々なライブラリを使うことでより強力なことをできるようになります。
Pythonについてさらにスキルをつけるなら以下の書籍がオススメです。
この書籍は Python の基本的な言語仕様から標準ライブラリの使い方までを詳しく、
そして分かりやすく解説しています。
Pythonの初心者だけでなく、
Pythonが使える人が改めてPythonのスキルを整理するのにも最適な一冊と言えるでしょう。
Amazon 上で試し読みもできるのでぜひ一読してみて下さい。
また、Pythonについて基礎から学ぶのであれば、オンラインスクールも良いでしょう。
オンラインスクールで学習すると、講義も分かりやすく、
サポート体制もしっかりしています。
オンラインで無料レッスンを体験することもできるので、
自分にあっているかどうかを確かめることができます。
オススメは以下の3つです。
どのスクールも無料体験が用意されているので、
契約前に自分に最適なスクールを探すことができるでしょう。
✔️オススメのプログラミングスクール ベスト3
- 未経験からIT業界へ転職なら【DMM WEBCAMP】
※ROLANDさんがプロモーターを務める有名スクールです。無料体験の内容も充実していて人気です。 - プログラミングのオンラインスクールCodeCamp
※ここも有名なスクールです。サポート体制がしっかりしているので安心です。 - 3ヶ月間のプログラミングスクール【Tech Boost】
※比較的新しいスクールですが、そのクオリティの高さから伸びてきているスクールです。
プログラミングスクールについては「プログラミングスクールで失敗しないためには【オススメベスト3も紹介】」の記事でも紹介しています。
気になった方はぜひチェックしてみて下さい〜!
コメント