Posted at

[Unity] MiniJsonをちょっと楽にするスクリプト

More than 3 years have passed since last update.

Unity(C#)でjsonったら



  • LitJson : 型指定して、クラスor構造体に変換する。大型プロジェクトで使うかも


  • MiniJson : object型にする。ゆるく使いたい。

LitJsonは完全に型安全にパースできるけど、

そのためにjsonに完全に対応した型を毎回つくらなきゃいけない。

状況に応じて、jsonの中身が変わるようなやつだとつらい。

最近はMiniJsonを使うほうが多いのですが、

いかんせんパラメータのアクセスが面倒。

例えばこんなjsonがあったとして…。


sample.json

{

"result":"ok",
"response":{
"code":1,
"users":[
{"name":"kuro"},
{"name":"tama"}
]
}
}

よくある普通のjsonですが


MiniJson


Sample_MiniJson.cs


var json = (IDictionary) MiniJSON.Json.Deserialize (jsonAsset.text);

// 一階層目までは楽。
string result = (string) json["result"];

// クロの名前を…
var response = (IDictionary) json["response"];
var users = (IList) response["users"];
var kuro = (IDictionary) users[0];
string kuroName = (string) kuro["name"];

Debug.Log(kuroName);


jsとかやってた人には耐えられない感じになります。


JsonNode.cs

MiniJson + このスクリプトを入れれば、こんなかんじでアクセス出来るようになります。

JsonNode.cs


Sample_JsonNode.cs


JsonNode json = JsonNode.Parse(jsonAsset.text);

// Get<T> で型指定して取得
string result = json["result"].Get<string>();

// IDictionary or IListは繋げられます
string kuroName = json["response"]["users"][0]["name"].Get<string>();

Debug.Log(kuroName);


for文も使えます。


Sample_foreach.cs


JsonNode json = JsonNode.Parse(jsonAsset.text);
foreach(var user in json["response"]["users"]) {
string name = user["name"].Get<string>();
Debug.Log(name);
}


jsなんかにくらべると、まだ固いですが。

これくらいのゆるさで使えれば、わりかし楽になるかと。

JsonNode.cs