3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PlayMaker EcosystemにあるJSONパース系のActionを片っ端から調べてみた

Last updated at Posted at 2023-12-12

これは STYLY Advent Calendar 2023 の13日目の記事です。

PlayMaker EcosystemにあるJSONパース系のActionを片っ端から調べてみた

PlayMakerで開発をしていると、 JSONをパースしたい! と思うことがあると思います。

とくによくあるのが、 WebAPIのHTTPレスポンスがJSON形式なので、それをパースしたい! という状況です。

そこで、PlayMakerの拡張機能をまとめている PlayMaker Ecosystem を調べてみました!

image.png

JSON と名の付くActionがいっぱいあーるじゃないですかー!わくわく!

というわけで、全部調べみました!

結論: 実用に耐えるActionはない!

一番気になっている「HTTPの応答解析に使えるのか?」という観点ですが、さきに結論から書くと、

応答解析に使えるActionは一つもありません!

・・・いや、使えんのかーい!!

本記事は、あくまで私が 趣味で調べた結果を共有する内容となっております!

また、STYLYアドベントカレンダーに応募しているので、非常に紛らわしいですが、 STYLYで使えるノウハウを紹介する記事でもありません!

それでも良い方のみ、ここから先をお読みください!

PlayMaker Ecosystemが必要

PlayMaker Ecosystemの導入方法はこちらをご覧ください。

ちなみに、 STYLYはEcosystemをサポートしていなので、ご注意ください!

繰り返しになりますが、私が趣味で調べた結果を共有する記事となっております!

STYLYで使えるノウハウを紹介する記事ではありません! ごめんなさい!

Action 1 : ExtractFromJson

トップバッターは ExtractFromJson です!

いかにもJSONをパースできそうな名前です。

image.png

ソースコードはこちらです。

こちらのアクションですが、以下のような 1階層のみ のJSON文字列をパースできます!

{
  "hoge": 0,
  "fuga": true,
  "piyo": "foo"
}

Extract 欄にkeyを指定すると、 Result 欄にvalueが格納されるんですね。
たとえば、 Extractfuga と指定すると、 Result には true が格納されます!

Result の型は動的に決まります。(すごい!)

ただ、以下のような多階層のJSONはパースできません!

{
  "hoge": {
    "fuga": true,
    "piyo": {
      "foo": "bar"
    }
  }
}

WebAPIの応答は、一般的に多階層のJSONですので、パースできないんですね。。。

Action 2 : HashTableAddFromJson

エントリーナンバー2は HashTableAddFromJson です!

image.png

ソースコードはこちらです。

こちらのアクションも、以下のような 1階層のみ のJSON文字列をパースできます!

{
  "hoge": 0,
  "fuga": true,
  "piyo": "foo"
}

パースした結果を、Reference 欄のHashTableに格納できるんですね!

HashTableというのは、いわゆる連想配列のことで、 PlayMaker Ecosystemの Array Maker というパッケージをインストールすると使えるようになります。

image.png

こちらのアクションも多階層のJSONはパースできないので、WebAPIの応答解析には使えないですね。。。

Action 3 : JsonLoad

PlayMakerCustomActions_U2019JsonLoad という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": [
    // 中略
  ]
}

savedFloatsavedInt といった キー名は、全部固定です!
この形式に則っていないJSONはパースできません!

実は、この JsonLoad アクションは、汎用的なものではなく、 JsonSave アクションで出力されたJSONファイル専用のローダーなんですね!

JsonSave はこんな風に、パラメーターの配列をファイル出力することができるアクションです。

image.png

反対に、 JsonLoad は、こんな風に、パラメーターの配列をファイルから読み込むことができます。

image.png

任意の形式のJSONをパースすることができるわけではないので、WebAPIの応答解析には使えませんね!

さいごに

どのActionも、WebAPIの応答解析に使えそうにないことがわかりました!
どれも何年も前からほとんど保守されておらず、不安定なものが多い印象です。

繰り返しになりますが、私が趣味で調べた結果を共有する記事となっております!

STYLYで使えるActionを紹介する記事ではありません!

そのあたりを期待していた方にはごめんなさい!

本記事作成にあたり、以下のサイトを参考にさせていただきました。ありがとうございました。

宣伝

Psychic VR LabではUnityエンジニア・サーバーサイドエンジニアを募集しています!!ご応募お待ちしています!!

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?