73
56

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

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

73
56
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
73
56

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?