【Unity】Utf8JsonでJsonファイルを読み込み・書き込みする

どうも、ゆみねこです。

UnityでJsonファイルを入出力したくなることはよくありますが、いつも記述を忘れてしまうのでメモします。

書き込み

Json固有の扱いを説明する前に、まずは汎用的なファイルの操作から説明します。

StreamWriter

書き込みにはStreamWriterというクラスを使います。
他にもいくつか方法がありますが、まあ大抵はこれでいいんじゃないかと思います。多分。

try catchで囲い、書き込めたかどうかを判断しています。特に難しいことはないですね。

ファイルの解放処理をしていませんが、usingステートメントの中に書くことで自動でやってくれるため、記述は不要です。

読み込み

FileStream、StreamReader

ファイルの指定にはFileStreamを使い、 読み込みにはStreamReaderを使います。

先ほどと同様、usingステートメントで囲って解放漏れを防いでいます。
これも特に説明すべきポイントはありません。

スポンサードサーチ

実践編:jsonファイルの読み書き

実践として、Unityで扱っている自作クラスをシリアライズしてjsonに保存し、読み込む処理を書いてみましょう。

jsonへのシリアライズ・デシリアライズには、C#の中では最速と名高いUtf8Jsonを使います。
(Utf8Jsonの使い方については、有志の記事に譲ります)

ソースコード

解説

  • JsonSerializer.ToJsonString(T) で、自作クラスをJson用のstringにシリアライズ
  • JsonSerializer.Deserialize<T> (json) で、json文字列を任意のクラスにデシリアライズ

あとは、先ほど解説したRead / Writeメソッドを使ってファイルへ書き込みます。Editor環境下ではAssetフォルダ直下に作られますが、実機動作を想定するならApplication.persistentDataPathなどにおきかえてください。

参考記事:Unityで取得できるパス一覧

System.Serializable をつけずとも、プロパティやListもさっくり保存してくれて便利ですね。

余談ですが、string.Joinを使うことによって、配列の中に格納されている文字列を任意のセパレータで区切って一括出力できます。

注意点

Utf8JsonをIL2CPPやWebGL環境下で動かすには、公式ツールを使って事前にコードを生成し、リゾルバーに注入してあげる必要があります。

詳しいやり方については、いずれ別記事でまとめようと思います。

まとめ

なにもJsonに限定する必要はありませんが、シンプルで扱いやすいので採用したい人も多いかと思われます。

Unity標準のJson UtilityではListやDictionaryが使えず、nullも許容しないという歯がゆい設計なので、Utf8Jsonでさくさくやっていきましょう。

記事をシェアする