2015年04月05日

UnityでJSONデータを扱う


さて、前回の『Unityで外部データベースからデータを引っ張ってくる』の続きです。

前回、PHP側からUnity側にデータを送る際に、
送るデータをJSONデータに変換していたと思います。
具体的にはこの部分。

//読み込んだデータをjson形式で端末に送信する
header('Content-type: application/json');
print json_encode($ranking);

JSONデータってのはテキストベースのデータフォーマットのことでして…

$data=array(
    'name'=>'sabao',
    'sex'=>'male',
    'age'=>48,
    'weight'=>80,
    'birthday'=>'1978-04-15'
);

PHPでのこの連想配列データをJSONデータにすると、

{
  "name": "sabao",
  "sex": "male",
  "age": 48,
  "weight": 80,
  "birthday": "1978-04-15"
}

こんな感じになります。
この形にしてあげると、Unity側でのデータの受け取りが可能なのです。

しかしながらJSONデータそのままではUnity側では扱いきれないので、
使えるように”LitJSON”のPluginを追加します。
“http://lbv.github.io/litjson/”にアクセスして、
“LitJson.dll”をダウンロードしたら、/assets/Pluginsに突っ込んでくださいまし。

そして、前回のソースに改良を加えたのがこちら。

using LitJson;  //Litjson読み込み

private IEnumerator GetData(){

  url="http://example.com/getData.php";	//url作成

  //各種変数の宣言
  string name;     //名前
  string sex;      //性別
  int age;         //年齢
  int weight;      //体重
  string birthday; //誕生日

  //データ送信準備
  WWWForm wwwForm = new WWWForm();
  wwwForm.AddField( "keyword", "data" );//不正接続防止用キーワード

  //MySQLのデータを取得しにいく
  WWW result = new WWW(url,wwwForm);

  // レスポンスを待つ
  yield return result;

  //返ってきたjsonデータをエンコード
  JsonData  jsonParser = JsonMapper.ToObject(result.text);

  //各データを変数に格納
  name=jsonParser["id"].ToString();
  sex=jsonParser["sex"].ToString();
  age=(int)jsonParser["age"];
  weight=(int)jsonParser["weight"];
  birthday=jsonParser["birthday"].ToString();
  
  //データ出力
  Debug.Log ("データを出力するよッ!!");
  Debug.Log ("名前:"+name);
  Debug.Log ("性別:"+sex);
  Debug.Log ("年齢:"+age);
  Debug.Log ("体重:"+weight);
  Debug.Log ("誕生日"+birthday);
  Debug.Log ("出力終了ッ!!(・∀・)");

  break;
}

こんな感じ。
冒頭の『using LitJson;』を忘れずに。

//返ってきたjsonデータをエンコード
  JsonData  jsonParser = JsonMapper.ToObject(result.text);

この部分で、JSONデータをエンコードしています。
result.text内に、PHPから取得したJSONデータが入ってるんで、
それをJsonData型の配列変数に変換してるという感じ。
厳密に言うと違うんだろうけど、そう考えたほうが理解しやすいかなぁと勝手に勘違いしてます。

  //各データを変数に格納
  name=jsonParser["id"].ToString();
  sex=jsonParser["sex"].ToString();
  age=(int)jsonParser["age"];
  weight=(int)jsonParser["weight"];
  birthday=jsonParser["birthday"].ToString();

この部分で、JSONデータからエンコードしたデータを、
各種変数に代入してます。
それぞれint,stringにキャストしているのは、
そのままだと『型が違うわよ!!ヽ(`Д´#)ノ』とerrorになってしまうためです。

以上でごわす。
これで、一応サーバーとの通信は実装できます。

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)