この記事でのバージョン
Unity 6000.0.42f1
はじめに
UnityにはJsonUtilityというJSONデータを手軽に扱えるクラスがあります。
そんなJsonUtilityはJSONの形式がおかしいと以下のようにエラーを出します。
ArgumentException: JSON parse error: Missing a name for object member.
//Jsonから変換する用のサンプルクラス [System.Serializable] public class SampleData { public int number; public string text; }
//不正な形式なJSON文字列をJsonUtilityで変換 string jsonString = "{ \"number\": 123, \"text\": \"Hello\", \"extra\": true, }"; SampleData data = JsonUtility.FromJson<SampleData>(jsonString);
![]() |
今回はこういったJsonUtilityの変換失敗を検知してエラーが出ないようにする方法の紹介です!
UnityのJsonUtilityでJSONの変換失敗を検知する方法
JsonUtilityは手軽に扱える反面、機能が少なく、変換失敗を検知する機能はありません。
なので、変換の失敗にはtry-catchを使う必要があります。
// テスト用のJSON文字列(あえて不正な部分を含む) string jsonString = "{ \"number\": 123, \"text\": \"Hello\", \"extra\": true, }"; //try-catchで変換失敗のエラーを try { SampleData data = JsonUtility.FromJson<SampleData>(jsonString); if (data == null) { Debug.Log("JsonUtility: 変換結果がnullでした。"); } else { Debug.Log($"JsonUtility: number={data.number}, text={data.text}"); } } catch (System.Exception e) { //try内で例外発生(JSONの変換失敗)検知 Debug.Log($"JsonUtility: 例外が発生 -> {e.Message}"); }
![]() |
なお、空文字やnullのstringを変換しようとするとエラーは出ず、変換されたオブジェクトがnullになる
という点にも注意が必要です。
![]() |
なお、JsonUtilityでなく他のライブラリを使うという手段もあります。
例えば、C#でJSONを扱う有名なライブラリJson.NET(Newtonsoft.Json)は
Unity向けに公式にパッケージもありますし、多機能でエラーハンドリングも充実しています。
実際にJson.NETを試した所、多機能ではあるんですが、
変換失敗の検知にtry-catchが必要な点はJsonUtilityと同じでした。