marshmallowの使い方【Pythonライブラリ】

marshmallowの使い方【Pythonライブラリ】Marshmallow
ゆうすけ
ゆうすけ

marshmallowの使い方が分かりません・・・

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

marshmallowはschema定義用のPythonライブラリだ。
JSONデータをPythonで読みこむ時などに使えるぞ。

 

✔️ 本記事のテーマ

marshmallow(Pythonライブラリ)の使い方


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

本記事は「marshmallowを使ったJSONデータの読み込み」について書いています。

 

この記事を読むことで
「marshmallowのschema定義 や marshmallowを使ったPythonサンプルコード」
を理解できます。

 

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

 

marshmallowを使うことで、
JSONデータをインプットとしてPythonモジュールを動かすことができます。

 

marshmallowはその手軽さ & 便利さから、世界ではそれなりに使われています。

 

今回はmarshmallowを使って、PythonからJSONデータを受け取る方法について解説します。

 

marshmallow(Pythonライブラリ)とは?

marshmallow(Pythonライブラリ)とは?

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

 

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

 

Pythonでシステムを作る上で、JSONデータをインプットとすることもあるでしょう。

 

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

 

次章から、marshmallowの具体的な使用方法について解説していきましょう。

 

marshmallowのPython環境へのインストール

marshmallowのPython環境へのインストール

marshmallowはサードパーティ製のPythonライブラリです。

 

そのため、marshmallowを使うには、Python環境へインストールする必要があります。

 

ターミナルから以下のコマンドで、marshmallowをインストールしましょう。

pip install marshmallow

 

これによりPythonからmarshmallowを使えるようになります。

 

marshmallowの使い方(手順)

marshmallowの使い方(手順)

marshmallowは以下の手順で使用します。

  1. model定義
  2. schema定義
  3. schemaを使ってJSONデータを読み込む/書き出す

順番に説明していきましょう。

 

model定義(Pythonライブラリmarshmallowでの前準備)

marshmallowでschemaを作るにはまずmodelを定義する必要があります。

 

modelとはschema定義の雛形のようなものです。

 

ただこれは動作上のお作法のようなものなので、modelで特にややこしい定義を行う必要はありません。

 

superclassとしてお決まりの定型文を書き、
個別のmodelではclassだけ定義しておき中身はpassしておけばOKです。

class AllArgConstructorModel:

    def __init__(self, **kwargs):
        for k, v in kwargs.items():
            setattr(self, k, v)


class SampleModel(AllArgConstructorModel):
    pass

 

なお、デバッグのために__repr__などを定義することもできますが、特に必須ではありません。

 

次にこのmodelを使ってschemaを定義していきましょう。

 

schema定義(Pythonライブラリmarshmallowでの前準備)

schema定義では各schemaの項目を定義します。

 

from marshmallow import Schema, fields, post_load

from models import SampleModel


class SampleModelSchema(Schema):
    id = fields.Int(required=True)
    name = fields.Str(required=True)

    @post_load
    def build(self, data, **kwargs):
        return SampleModel(**data)

上記コードのように各schemaに必要な項目をclaas変数として定義します。

 

また、その項目の型、必須かどうかなどもここで定義します。

 

例えば、String型、必須YESのnameという項目は以下のように定義します。

name = fields.Str(required=True)

 

最後にJSONデータをloadした時の挙動も定義します。

 

ここは定型文で先ほどのmodelをreturnするように書けばOKです。

@post_load
def build(self, data, **kwargs):
    return SampleModel(**data)

schemaを使ってJSONデータを読み込む/書き出す

ここまででschema定義が完了しているはずなので、
いよいよschemaを使ってJSONデータを読み込んでいきます。

 

データLOAD時は、まずschema定義で定義したclassでインスタンスを生成します。
そして、生成したインスタンスのlaodメソッドを使うことでデータを読み込むことができます。

# LOAD
schema = SampleModelSchema()
smp = schema.load(smp)

 

このように書くことでsmpには、読み込んだJSONの最上位のデータが入ってきます。

 

また、Python側で処理を加えたデータをJSONにDUMPするときも同じです。

 

schema定義のインスタンスを生成し、
dumpメソッドを使うことでデータを書き出すことができます。

# DUMP
schema = SampleModelSchema()
schema.dumps(SampleModelSchema(name='Taro', age=20))

 

このようにしてmarshmallowを使って、
PythonからJSONデータの読み込み/書き出しを行うことができます。

 

marshmallowやPythonについてスキルをつけるなら

marshmallowやPythonについてスキルをつけるなら

marshmallowを使ったPythonでJSONデータ読み込む方法について解説しました。

 

Pythonをマスターすると様々なことがプログラムでできるようになります。

Pythonを深く網羅的に学ぶためには以下の書籍がオススメです。

 

この書籍はPythonについてかなり深く、そして丁寧に書かれています。

Python の基本文法だけでなく、

いかにして Python の持つ力を最大限引き出せるかという視点で書かれています。

 

Python 初心者はもちろん、すでに Python を使える方にもオススメの一冊です。

エンジニアとしての自身の価値をチェックする(完全無料)

エンジニアとして、

自分の価値がどれくらいのものかご存知でしょうか?

 

エンジニアとしてIT業界に身を置いていると

今の会社でずっと働くのか、フリーランスとして独立するのか …

と様々な選択肢があります。

 

どの選択肢が正解なのかを見極めるためにも、選択肢を広げるためにも

自身の価値を知っておくことはとても重要です。

 

TechClips ME では、

職務経歴書をアップロードするだけで企業からのスカウトを受けることができます。

▼▼▼▼▼

▲▲▲▲▲

しかもTechClips MEでは想定年収を企業から提示してくれるので、

自身の価値を数字で分かりやすくたしかめることができます。

 

登録はもちろん完全無料なので、一度登録してみると良いかもしれません。

 

コメント

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