UnityでREST API通信 ③JSON形式のデータをオブジェクト化する
こんにちは!
Unityで REST API通信 ② データベースの中身を取得する - よりみちアプリ開発
の続きです。
JSON形式のデータをUnityで扱うには、JsonUtility
を使います。
JSONをオブジェクト化するために、JSONの値を格納する用のクラスを作って、カラムごとに変数定義します。
こちらのサイトがコピペで変換してくれておぉ便利!と思っていた矢先…
4月17日でドメインが切れてました😭
一つ一つ書いていくの面倒だなぁと思っていたら、 エンジニアの夫がJavaScriptで変換するメソッドを作ってくれたので、 いずれどこかに公開できればいいなと思ってます。
まずは、JSONのデータを格納するクラス
[System.Serializable] public class HogeData { public int id ; public string name ; . . . }
以下は、前回のHogeController
に追記していきます。
//メンバ変数 HogeData hoge;
public void Start() { //HogeDataクラスをインスタンス化する HogeData hogeData = new HogeData(); . . . }
if(request.responseCode == 200){ . . . //JsonUtilityで、JSONをHogeDataクラスに格納 hoge = JsonUtility.FromJson<HogeData>(jsonText); }
今回は以上です。
わかりづらい点がありましたらお気軽にきいてください。
次回に続きます。
Unityで REST API通信 ② データベースの中身を取得する
こんにちは!
UnityでREST API通信 ① GET通信をおこなう - よりみちアプリ開発
の続きです。
サーバとの通信ができたので、データベースの中身を取得します!
データベースの中身は、JSON形式で取ってくることになります。
前回のソースコードの、
/* ここに処理を書く */
の部分に追記していきます♪
if(request.isNetworkError){ Debug.Log(request.error); }else{ //リクエストが成功した時 if(request.responseCode == 200){ //サーバーから受信したデータを、UTF8 ストリングとして取得 string jsonText = request.downloadHandler.text; //JSONがunicodeで、仮名がエスケープされてしまうため、エスケープされた文字を変換 jsonText = System.Text.RegularExpressions.Regex.Unescape(jsonText); Debug.Log(jsonText); } }
取得した結果が、コンソールにJSON形式で出力されます。
JSONの中身がエスケープされてしまうのは、なぜだかわからず少しハマってしまいました。
System.Text.RegularExpressions.Regex.Unescape()
は、.NETのメソッドらしいです。
Regex.Unescape(String) メソッド (System.Text.RegularExpressions) | Microsoft Docs
②は以上です。
わかりづらい点がありましたらお気軽にきいてください^^
次回は、JSONの中身をオブジェクトに変換します。
UnityでREST API通信 ① GET通信をおこなう
今回は、UnityでAPI通信を行う製作メモです。
APIはLaravelで製作し、RESTfulな設計にしてます。
まずは、GET通信でデータベースのデータを取得し、ローカルに保存するところまでやっていきたいと思います。
Unityが提供してる通信APIは、
www
と
UnityWebRequest
です。
www
は HTTPメソッドがGETとPOSTのみ。
UnityWebRequest
は、+PUT
とDELETE
も使えるとのことで、
www
はシンプルにWebにアクセスするときに使うようです。
コードは以下のような感じです↓
using System.Collections; using UnityEngine; //これが必要になります using UnityEngine.Networking; public class HogeController : MonoBehaviour { string webURL = "http://~"; public void Start() { //通信はコルーチンを使って行います。 StartCoroutine(GetData()); } IEnumerator GetData(){ UnityWebRequest request = UnityWebRequest.Get(webURL); yield return request.SendWebRequest(); //エラー処理 if(request.isNetworkError){ Debug.Log(request.error); }else{ //リクエストが成功した時 if(request.responseCode == 200){ /* ここに処理を書く */ } } }
サーバーとGETで通信させることができました。
①は以上です。
②では、データベースの中身をJSON形式で取得します。
わかりづらい点がありましたらお気軽にきいてください(^-^)