これは STYLY Advent Calendar 2023 の13日目の記事です。
PlayMaker EcosystemにあるJSONパース系のActionを片っ端から調べてみた
PlayMakerで開発をしていると、 JSONをパースしたい! と思うことがあると思います。
とくによくあるのが、 WebAPIのHTTPレスポンスがJSON形式なので、それをパースしたい! という状況です。
そこで、PlayMakerの拡張機能をまとめている PlayMaker Ecosystem
を調べてみました!
JSON
と名の付くActionがいっぱいあーるじゃないですかー!わくわく!
というわけで、全部調べみました!
結論: 実用に耐えるActionはない!
一番気になっている「HTTPの応答解析に使えるのか?」という観点ですが、さきに結論から書くと、
応答解析に使えるActionは一つもありません!
・・・いや、使えんのかーい!!
本記事は、あくまで私が 趣味で調べた結果を共有する内容となっております!
また、STYLYアドベントカレンダーに応募しているので、非常に紛らわしいですが、 STYLYで使えるノウハウを紹介する記事でもありません!
それでも良い方のみ、ここから先をお読みください!
PlayMaker Ecosystemが必要
PlayMaker Ecosystemの導入方法はこちらをご覧ください。
ちなみに、 STYLYはEcosystemをサポートしていなので、ご注意ください!
繰り返しになりますが、私が趣味で調べた結果を共有する記事となっております!
STYLYで使えるノウハウを紹介する記事ではありません! ごめんなさい!
Action 1 : ExtractFromJson
トップバッターは ExtractFromJson
です!
いかにもJSONをパースできそうな名前です。
ソースコードはこちらです。
こちらのアクションですが、以下のような 1階層のみ のJSON文字列をパースできます!
{
"hoge": 0,
"fuga": true,
"piyo": "foo"
}
Extract
欄にkeyを指定すると、 Result
欄にvalueが格納されるんですね。
たとえば、 Extract
に fuga
と指定すると、 Result
には true
が格納されます!
Result
の型は動的に決まります。(すごい!)
ただ、以下のような多階層のJSONはパースできません!
{
"hoge": {
"fuga": true,
"piyo": {
"foo": "bar"
}
}
}
WebAPIの応答は、一般的に多階層のJSONですので、パースできないんですね。。。
Action 2 : HashTableAddFromJson
エントリーナンバー2は HashTableAddFromJson
です!
ソースコードはこちらです。
こちらのアクションも、以下のような 1階層のみ のJSON文字列をパースできます!
{
"hoge": 0,
"fuga": true,
"piyo": "foo"
}
パースした結果を、Reference
欄のHashTableに格納できるんですね!
HashTableというのは、いわゆる連想配列のことで、 PlayMaker Ecosystemの Array Maker
というパッケージをインストールすると使えるようになります。
こちらのアクションも多階層のJSONはパースできないので、WebAPIの応答解析には使えないですね。。。
Action 3 : JsonLoad
PlayMakerCustomActions_U2019
に JsonLoad
というActionがあります!
どんなJSONでも読み込んでくれそうな名前で、期待せざるを得ません!
ソースコードはこちらです。
こちらのアクションですが、 以下のような階層構造を持ったJSONのみ 、パースできます!
{
"savedFloat": [
{
"useVariable": true,
"name": "InputFloat1",
"tooltip": "",
"showInInspector": false,
"networkSync": false,
"value": 1.100000023841858
},
{
"useVariable": true,
"name": "InputFloat2",
"tooltip": "",
"showInInspector": false,
"networkSync": false,
"value": 2.200000047683716
}
// 中略
],
"savedInt": [
// 中略
],
"savedString": [
// 中略
],
"savedBool": [
// 中略
],
"savedVector2s": [
// 中略
],
"savedVector3s": [
// 中略
],
"savedArray": [
// 中略
]
}
savedFloat
や savedInt
といった キー名は、全部固定です!
この形式に則っていないJSONはパースできません!
実は、この JsonLoad
アクションは、汎用的なものではなく、 JsonSave
アクションで出力されたJSONファイル専用のローダーなんですね!
JsonSave
はこんな風に、パラメーターの配列をファイル出力することができるアクションです。
反対に、 JsonLoad
は、こんな風に、パラメーターの配列をファイルから読み込むことができます。
任意の形式のJSONをパースすることができるわけではないので、WebAPIの応答解析には使えませんね!
さいごに
どのActionも、WebAPIの応答解析に使えそうにないことがわかりました!
どれも何年も前からほとんど保守されておらず、不安定なものが多い印象です。
繰り返しになりますが、私が趣味で調べた結果を共有する記事となっております!
STYLYで使えるActionを紹介する記事ではありません!
そのあたりを期待していた方にはごめんなさい!
本記事作成にあたり、以下のサイトを参考にさせていただきました。ありがとうございました。
宣伝
Psychic VR LabではUnityエンジニア・サーバーサイドエンジニアを募集しています!!ご応募お待ちしています!!