はじめに
何年か前にこちらで書いた記事が元ネタになってます。 この時はパッケージングして公開まではしていなかったですが、 最近ProcessingのGradle製ライブラリテンプレートの 手入れをしたので、せっかくだからライブラリにしてみました。
JacksonP5について
JacksonのProcessingラッパーです。 JacksonはJavaでJSONを扱うためのライブラリです。 JSONのオブジェクトに対応するクラスを定義することで、 インスタンスをJSON文字列にシリアライズしたり、 JSON文字列をインスタンスにデシリアライズすることができます。
Processingにはもともと
JSONObjectという
JSONを扱うクラスが存在しています。
しかし、JSONObject
は学習コストが低い反面、
JSONのプロパティにアクセスする手段は
getString()
やgetFloat()
などしか用意されていません。
なので、コーディングとJSONスキーマの確認作業を交互におこないがちになってしまいます。
ですがJacksonは、JSONのオブジェクトに対応するクラスを定義することで、 JSON文字列をパースしてインスタンス化することができます。 これによりJSONとJavaインスタンスを、よりスムーズに行き来することができます。
こちらがJacksonP5を使って、 ProcessingのJSONObjectをJavaインスタンスに変換するサンプルになります。
もちろんJSON文字列からもインスタンス化できます。
使い方は慣れれば簡単です。 まず JSONに対応するstaticクラスを定義 します。 サンプルではBallクラスですね。 このクラスは JacksonP5Objectを継承 する必要があります。 また @JsonProperty()でJSONオブジェクトが持つプロパティとクラスのプロパティを紐付ける 必要があります。 @JsonProperty()はJacksonで定義されているアノテーションです。
念の為箇条書きで列挙しておきます。
- JSONに対応するstaticクラスを定義する
- JacksonP5Objectを継承する
- @JsonProperty()でプロパティを紐付ける
余談
このクラスはstatcクラスである必要があります。
これはpdeファイルで定義されたクラスは暗黙的にPApplet
を継承したメインクラスの内部クラスになるためです。
まだ試していませんが、Processing IDEでも.java
ファイルとしてクラスを定義すればstaticクラスにする必要はないと思います。
より実践的な使い方
では実用的な使い方について書いていこうと思います。
OpenWeatherの Weather APIを使った例を示そうと思います。
OpenWeatherはアカウントを作成してAPIキーを取得する必要があるので、 こちらの 記事を参考に取得してください。