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

  • 52
    いいね
  • 2
    コメント
この記事は最終更新日から1年以上が経過しています。

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