Unity | Unity发送Http请求并处理得到的Json数据

说明

Unity中UnityWebRequestWWW都可以实现HTTP请求,这里使用的是UnityWebRequest发送Post请求。

UnityAPI-UnityWebRequest

架构

UnityWebRequest 生态系统将 HTTP 事务分解为三个不同的操作:

  • 向服务器提供数据
  • 从服务器接收数据
  • HTTP 流量控制(例如,重定向和错误处理)

为了给高级用户提供更好的界面,这些操作均由自己的对象进行管理:

  • UploadHandler 对象处理数据到服务器的传输
  • DownloadHandler 对象处理从服务器接收的数据的接收、缓冲和后处理
  • UnityWebRequest 对象管理其他两个对象,还处理 HTTP 流量控制。此对象是定义自定义标头和 URL 的位置,也是存储错误和重定向信息的位置。
    Unity | Unity发送Http请求并处理得到的Json数据_第1张图片

对于任何 HTTP 事务,正常的代码流程如下:

  • 创建 Web 请求对象
  • 配置 Web 请求对象
    - 设置自定义标头
    - 设置 HTTP 动词(例如 GET、POST 和 HEAD - 除 Android 之外的所有平台都允许使用自定义动词)
    - 设置 URL *(可选)创建上传处理程序并将其附加到 Web 请求
    - 提供要上传的数据
    - 提供要上传的 HTTP 表单 *(可选)创建下载处理程序并将其附加到 Web 请求
  • 发送 Web 请求
    - 如果在协程中,可获得 Send() 调用的结果以等待请求完成 (可选)读取从下载处理程序接收的数据 (可选)从 UnityWebRequest 对象中读取错误信息、HTTP 状态码和响应标头

步骤一:发送post请求

/*
url:请求地址
*/
public void Geturl()
{
    StartCoroutine(PostRequest(url));
}

    IEnumerator PostRequest(string url)
    {
    	//所提交的表单
        WWWForm form = new WWWForm();
        //加上请求参数,如参数名“Content-Type",内容”application/json“
        form.AddField("Content-Type", "application/json");
        
        //发送Post请求
        using (UnityWebRequest webRequest = UnityWebRequest.Post(url, form))
        {
            yield return webRequest.SendWebRequest();
            if (!string.IsNullOrEmpty(webRequest.error))
            {
                Debug.LogError(webRequest.error);
            }
            else
            {
            	//获得返回数据
                Debug.Log(webRequest.downloadHandler.text);
            }
        }
    }

步骤二:处理得到的Json数据

在上一步中,我们获得了返回数据webRequest.downloadHandler.text,现在处理返回的内容得到想要的数据

得到类

利用Json在线解析网站,将webRequest.downloadHandler.text生成实体类
比如JSON数据为

{
    "name":"so json 在线工具",
    "url":"https://www.sojson.com",
    "address":{
        "city":"北京",
        "country":"中国"
    },
    "arrayBrowser":[{
        "name":"Google",
        "url":"http://www.google.com"
    },
    {
       "name":"Baidu",
       "url":"http://www.baidu.com"
   },
   {
       "name":"SoSo",
       "url":"http://www.SoSo.com"
   }]
}

生成的实体类为

public class Address
{
    public string city { get; set; }
    public string country { get; set; }
}

public class ArrayBrowser
{
    public string name { get; set; }
    public string url { get; set; }
}

public class Root
{
    public string name { get; set; }
    public string url { get; set; }
    public Address address { get; set; }
    public List<ArrayBrowser> arrayBrowser { get; set; }
}

将JSON内容赋值给对象

这里使用LitJSON插件,将Json数据赋值给对象,从而得到所需数据。

Root root = JsonMapper.ToObject<Root>(webRequest.downloadHandler.text);
string name = root.name;//"so json 在线工具"
string city = root.address.city; //"北京"

参考文档:

Unity实现HTTP请求
UnityWebRequest
Unity读取和解析JSON文件(1)-JSON和对象的转换
Unity 读取解析Json 文件

你可能感兴趣的:(游戏设计,unity,http,json)