LIFULL Creators Blog

「株式会社LIFULL(ライフル)」の社員によるブログです。

Unreal Engine4 でローカルにあるJsonをパースする。

こんにちは、上津原です。

前回はHTTP通信をしましたが、今回は同時によく使うであろうJsonのパースです。

Jsonのパースも、実はBluePrintで実装することができず、C++で実装する必要がありました。 なので再びAnswerHubを漁り、なんとか動いたので記事にしておきます。

今回はローカルにあるJsonファイル

前回HTTP通信をしましたが、今回はローカルです。なのでローカルからデータを読み出すコードも合わせて公開します。

gist435e728d81e751b66df0

読み込んでいるJsonファイルは以下です。

gist60688c55ae7be685325b

ちょっとした解説

Jsonはパースという名前ではなくて、シリアライズ、デシリアライズという名前で管理されています。

  • シリアライズ:JsonObjectからテキストへ
  • デシリアライズ:テキストからJsonObjectへ

という感じです。今回はテキストからJsonObjectへ変換するのでデシリアイズを行っています。

まだ不明なポイントとしては、

TArray<TSharedPtr> objArray = JsonObject->GetArrayField(TEXT("Entries"));

の部分です。

Arrayのオブジェクトを取得するのに無名のArrayを利用しようとしたのですが、いまいちやり方がわからず連想配列で名前を付けてやると取得ができました。

注意点

パッケージ化したときにSavedディレクトリ内には、置いておいたJsonファイルはなくなってしまってました。きちんと永続化したい場合は別の手段をとった方がよさそうです。今回はその必要がなかったのでそこまで調べていませ。

HTTP通信と組み合わせれば、API取得・パースができる!

前回のHTTP通信と組み合わせればよくあるAPI問い合わせができるようになると思います。

ここからBluePrintに利用したければ、Arrayに入れて、UPROPERTYしてやれば活用ができます。