UnityでJsonデータをPostする
今回はUnityからJsonデータを、APIサーバーへ送信する処理を備忘録として記しておきます。
※APIサーバーのソースは割愛します
名前空間の宣言
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Linq;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using UnityEngine.Networking;
----------------
using System.Text;
//Jsonデータをエンコードする際に必要
using System.IO;
//ファイルを読み書きする際に必要(今回は使用しないがJsonファイルを読み出したりする時に宣言する)
using System.Linq;
//Toggleで選択されている値を取得する際に必要
using UnityEngine.UI;
//UnityのUIをスクリプトで扱う際に必要
using UnityEngine.EventSystems;
//ユーザーからの入力やボタン操作をスクリプトで処理する際に必要
using UnityEngine.Networking;
//ネットワーク処理をする際に必要(リクエスト・レスポンス処理など)
JsonUtilityで構造体をシリアライズ
Unity5系に標準搭載のライブラリ「JsonUtility」を使用して構造体をJson形式にシリアライズします。この構造体に宣言されていないデータはJsonでのやり取りができません。
[System.Serializable]
public class AccountRegistrationJson {
public string sex;
public string dropdown_yt;
public string dropdown_mt;
public string dropdown_dt;
public string mailaddress;
public string password1;
public string password2;
public string userid;
}
構造体を初期化する
public AccountRegistrationJson AccountRegistrationData = new AccountRegistrationJson();
使用するUI要素をインスペクターから指定できるように宣言
[SerializeField] ToggleGroup Sex;
[SerializeField] Dropdown DropdownY;
[SerializeField] Dropdown DropdownM;
[SerializeField] Dropdown DropdownD;
[SerializeField] InputField MailAddress;
[SerializeField] InputField Password1;
[SerializeField] InputField Password2;
[SerializeField] InputField UserID;
一番最初に実行される関数でUIオブジェクトを取得する
public void Start()
{
Sex = GameObject.Find("Toggle").GetComponent<ToggleGroup>();
DropdownY = GameObject.Find("Dropdown1").GetComponent<Dropdown>();
DropdownM = GameObject.Find("Dropdown2").GetComponent<Dropdown>();
DropdownD = GameObject.Find("Dropdown3").GetComponent<Dropdown>();
MailAddress = GameObject.Find("Input_Mail").GetComponent<InputField>();
Password1 = GameObject.Find("Input_Password1").GetComponent<InputField>();
Password2 = GameObject.Find("Input_Password2").GetComponent<InputField>();
UserID = GameObject.Find("Input_UserID").GetComponent<InputField>();
}
ボタンクリック時の関数「onClick」を作成し、値を先ほど宣言した構造体内の変数に格納する。次に、格納した変数をJson形式へシリアライズする。
最後に、後述するIEnumeratorインターフェースで記述したメソッドをコールするコルーチンを記述する。
public void OnClick() {
AccountRegistrationData.sex = Sex.ActiveToggles().FirstOrDefault().GetComponentsInChildren<Text>().First(t => t.name == "Label").text;
AccountRegistrationData.dropdown_yt = DropdownY.options[dropdown_y].text;
AccountRegistrationData.dropdown_mt = DropdownM.options[dropdown_m].text;
AccountRegistrationData.dropdown_dt = DropdownD.options[dropdown_d].text;
AccountRegistrationData.mailaddress = MailAddress.text;
AccountRegistrationData.password1 = Password1.text;
AccountRegistrationData.password2 = Password2.text;
AccountRegistrationData.userid = UserID.text;
Toggle tgl = Sex.ActiveToggles().FirstOrDefault();
string jsonstr = JsonUtility.ToJson (AccountRegistrationData);
Debug.Log (jsonstr);
StartCoroutine(Post("http:〜〜", jsonstr));
}
Post時の反復処理を記述する
IEnumerator Post(string url, string jsonstr)
{
var request = new UnityWebRequest(url, "POST");
byte[] bodyRaw = Encoding.UTF8.GetBytes(jsonstr);
request.uploadHandler = (UploadHandler) new UploadHandlerRaw(bodyRaw);
request.downloadHandler = (DownloadHandler) new DownloadHandlerBuffer();
request.SetRequestHeader("Content-Type", "application/json");
yield return request.Send();
Debug.Log("Status Code: " + request.responseCode);
}
全体のコード
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Linq;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using UnityEngine.Networking;
public class AccountRegistration : MonoBehaviour
{
[SerializeField] ToggleGroup Sex;
[SerializeField] Dropdown DropdownY;
[SerializeField] Dropdown DropdownM;
[SerializeField] Dropdown DropdownD;
[SerializeField] InputField MailAddress;
[SerializeField] InputField Password1;
[SerializeField] InputField Password2;
[SerializeField] InputField UserID;
int dropdown_y;
int dropdown_m;
int dropdown_d;
[System.Serializable]
public class AccountRegistrationJson {
public string sex;
public string dropdown_yt;
public string dropdown_mt;
public string dropdown_dt;
public string mailaddress;
public string password1;
public string password2;
public string userid;
}
public AccountRegistrationJson AccountRegistrationData = new AccountRegistrationJson();
public void Start()
{
Sex = GameObject.Find("Toggle").GetComponent<ToggleGroup>();
DropdownY = GameObject.Find("Dropdown1").GetComponent<Dropdown>();
DropdownM = GameObject.Find("Dropdown2").GetComponent<Dropdown>();
DropdownD = GameObject.Find("Dropdown3").GetComponent<Dropdown>();
MailAddress = GameObject.Find("Input_Mail").GetComponent<InputField>();
Password1 = GameObject.Find("Input_Password1").GetComponent<InputField>();
Password2 = GameObject.Find("Input_Password2").GetComponent<InputField>();
UserID = GameObject.Find("Input_UserID").GetComponent<InputField>();
}
public void OnClick() {
AccountRegistrationData.sex = Sex.ActiveToggles().FirstOrDefault().GetComponentsInChildren<Text>().First(t => t.name == "Label").text;
AccountRegistrationData.dropdown_yt = DropdownY.options[dropdown_y].text;
AccountRegistrationData.dropdown_mt = DropdownM.options[dropdown_m].text;
AccountRegistrationData.dropdown_dt = DropdownD.options[dropdown_d].text;
AccountRegistrationData.mailaddress = MailAddress.text;
AccountRegistrationData.password1 = Password1.text;
AccountRegistrationData.password2 = Password2.text;
AccountRegistrationData.userid = UserID.text;
Toggle tgl = Sex.ActiveToggles().FirstOrDefault();
string jsonstr = JsonUtility.ToJson (AccountRegistrationData);
Debug.Log (jsonstr);
StartCoroutine(Post("http:〜〜", jsonstr));
}
IEnumerator Post(string url, string jsonstr)
{
var request = new UnityWebRequest(url, "POST");
byte[] bodyRaw = Encoding.UTF8.GetBytes(jsonstr);
request.uploadHandler = (UploadHandler) new UploadHandlerRaw(bodyRaw);
request.downloadHandler = (DownloadHandler) new DownloadHandlerBuffer();
request.SetRequestHeader("Content-Type", "application/json");
yield return request.Send();
Debug.Log("Status Code: " + request.responseCode);
}
}
この記事へのコメントはありません。