marshmallowのdata_keyオプションの使い方

marshmallowのdata_keyオプションの使い方Marshmallow
ゆうすけ
ゆうすけ

marshmallowライブラリdata_keyオプションってどう使うんですか?

資格マフィア
資格マフィア

marshmallowでschemaを読み込んだ際に
別名の key を定義するために使われるぞ。

 

✔️ 本記事のテーマ

 marshmallowライブラリのdata_keyについて

 

✔️ 読者さんへの前置きメッセージ

本記事は「marshmallowライブラリのdata_keyオプション」について書いています。

 

この記事を読むことで
「marshmallowでschemaを読み込んだ際に別名の key を使う方法」
について理解できます。

 

marshmallowはschema定義用のPythonライブラリです。

 

marshmallowライブラリではdata_keyオプションを使うことで、
schemaを読み込んだときにプログラム内で別名の key を使用することができます。

 

本記事では、そんなmarshmallowdata_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オプションの使い道

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(Pythonライブラリ)とは?

そもそもmarshmallowとは何なのでしょうか?

 

marshmallowはschema定義用のPythonライブラリです。

 

marshmallowを使うことで、
schemaを定義してPython型以外のデータ(例えば、JSONなど)を読み込むことができます。

 

marshmallowを使えば、
JSONの階層的なデータ構造をそのままPythonへ読み込むことができます。

 

marshmallowの具体的な使い方については
marshmallowの使い方【Pythonライブラリ】」の記事で解説しています。

 

marshmallowの便利なオプション

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やPythonについてスキルをつけるなら

marshmallowの data_key オプションについて解説しました。

 

Pythonをでは、様々なライブラリを使うことでより強力なことをできるようになります。

 

Pythonについてさらにスキルをつけるなら以下の書籍がオススメです。

 

この書籍は Python の基本的な言語仕様から標準ライブラリの使い方までを詳しく、
そして分かりやすく解説しています。

Pythonの初心者だけでなく、
Pythonが使える人が改めてPythonのスキルを整理するのにも最適な一冊と言えるでしょう。

Amazon 上で試し読みもできるのでぜひ一読してみて下さい。

 

また、Pythonについて基礎から学ぶのであれば、オンラインスクールも良いでしょう。

 

オンラインスクールで学習すると、講義も分かりやすく、
サポート体制もしっかりしています。

 

オンラインで無料レッスンを体験することもできるので、
自分にあっているかどうかを確かめることができます。

 

オススメは以下の3つです。
どのスクールも無料体験が用意されているので、
契約前に自分に最適なスクールを探すことができるでしょう。

✔️オススメのプログラミングスクール ベスト3

プログラミングスクールについては「プログラミングスクールで失敗しないためには【オススメベスト3も紹介】」の記事でも紹介しています。

 

気になった方はぜひチェックしてみて下さい〜!

コメント

タイトルとURLをコピーしました