Unity(C#)でjsonったら
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なんかにくらべると、まだ固いですが。
これくらいのゆるさで使えれば、わりかし楽になるかと。