この記事でのバージョン
Unity 6000.0.42f1
Newtonsoft.Json 3.2.1
はじめに
UnityにはJsonUtilityというJSONデータを手軽に扱えるクラスがありますが、
JsonUtilityは手軽に扱える反面、機能がかなり少ないです。
という事で、今回はNewtonsoft.Json(Json.NET)というライブラリの紹介です!
Newtonsoft.Json(Json.NET)
そもそもNewtonsoft.Json(Json.NET) とはなんぞやという所からですが、
C#(.NET)向けの有名なJSON処理ライブラリです。
JsonUtilityと比べて多機能で複雑なデータも扱えますし、Unity用のパッケージもあります。
そしてパッケージの導入はお馴染みPackageManagerからです。
![]() |
Install package by name…から、
com.unity.nuget.newtonsoft-jsonと入力してInstallを押すだけで、
![]() |
![]() |
導入完了です。
![]() |
使い方も簡単で、
JsonConvertをSerializeObjectでJson化、DeserializeObjectでオブジェクト化します。
using Newtonsoft.Json; //JsonConvertを使うのに必要
//JSON確認用のサンプルクラス [System.Serializable] public class SampleData { public int number; public string text; }
//サンプル作成 var sample = new SampleData { number = 123, text = "Hello, World!" }; //JSONシリアライズ(オブジェクト→JSON) var json = JsonConvert.SerializeObject(sample); Debug.Log(json); //JSONデシリアライズ(JSON→オブジェクト) var sampleCopy = JsonConvert.DeserializeObject<SampleData>(json); Debug.Log($"number : {sampleCopy.number}, text : {sampleCopy.text}");
![]() |
機能をざっくり紹介すると、JsonUtilityで扱えないDictionaryやプロパティが扱えますし、
[System.Serializable] public class SampleData { //DictionaryもJSON化可能 public Dictionary<string, int> Dict = new Dictionary<string, int> { { "apple", 3 }, { "banana", 5 } }; //プロパティもJSON化可能 public int Score { get; set; } = 100; }
![]() |
「想定外のフィールドがあれば弾く」などの変換設定をする事も可能です。
//Scoreしかないクラス [System.Serializable] public class SampleData { public int Score { get; set; } = 100; }
//Scoreだけでなく、Score2もあるJSON string json = "{\"Score\":100,\"Score2\":100}"; //変換設定を作成 var settings = new JsonSerializerSettings { MissingMemberHandling = MissingMemberHandling.Error, //想定外のフィールドがあれば弾く }; //想定外のフィールド(Score2)があるのでエラーが出る。 var sample = JsonConvert.DeserializeObject<SampleData>(json, settings);
![]() |
ただし、変換に問題が出た場合はJsonSerializationExceptionという例外を出すので、
検知して処理するにはJsonUtilityと同様にtry-catchを使います。
try { var sample = JsonConvert.DeserializeObject<SampleData>(json, settings); } catch (Exception e) { Debug.Log($"JsonConvertで例外が発生。{e.Message}"); }
![]() |
これはそもそもJSONとして成り立ってない場合(JSONじゃない、JSONが壊れてる等)も同様です。
var json = "でたらめなjsonじゃない文字列"; try { var sample = JsonConvert.DeserializeObject<SampleData>(json); } catch (Exception e) { Debug.Log($"JsonConvertで例外が発生。{e.Message}"); }
![]() |








