HTTP通信はWWWクラスでやる。
非同期呼び出しなのでStartCoroutineで呼び出す。
UnityでJSONを解析する方法はいくつかあるが
- LitJson
- JSONObject
を試してみた。
LitJsonはユーザー定義のデータオブジェクトにマッピングする方式。
JSONObjectは連想配列のような汎用オブジェクトにマッピングする方式。
簡単な形式のJSONならJSONObjectで、複雑な形式のJSONならLitJsonがいいんじゃないかと思う。
以下コード抜粋
JSONWebAPICallSample.cs
using LitJson;
//JSONObjectはnamespaceなしなのでusing不要
public class JSONWebAPICallSample : MonoBehaviour {
void Start() {
StartCoroutine(Download());
}
IEnumerator Download() {
WWW www = new WWW("http://localhost/abc.txt");
yield return www;
//LitJSONで解析
SampleData[] datas = JsonMapper.ToObject<SampleData[]>(www.text);
foreach (var d in datas) {
Debug.Log("d.id " + d.id);
Debug.Log("d.first " + d.first);
Debug.Log("d.second " + d.second);
Debug.Log("d.third " + d.third);
}
//JSONObjectで解析
JSONObject json = new JSONObject(www.text);
for (int i = 0; i < json.Count; i++) {
JSONObject json1 = json[i];
JSONObject id = json1.GetField("id");
JSONObject first = json1.GetField("first");
Debug.Log("json id.str=" + id.str);
Debug.Log("json id=" + id);
string a = "PPPP";
Debug.Log("json a=" + a);
Debug.Log("json id=" + id);
Debug.Log("json first=" + first);
}
Debug.Log(www.text);
}
}
[System.Serializable]
public class SampleData {
public string id;
public int first;
public int second;
public int third;
}
[abc.txt]
[
{
"id": "id1",
"first": 1,
"second": 2,
"third": 3
},
{
"id": "id2",
"first": 11,
"second": 22,
"third": 33
}
]
NGUI for Unity-【電子書籍】 |