Unity3D 通過JSON查詢天氣


一、天氣查詢API

  獲取天氣信息,首先要找到提供天氣數據的接口,我使用的是高德地圖免費為我們提供的,網址為 https://lbs.amap.com/api/webservice/guide/api/weatherinfo 

使用的前提是注冊一個高德賬號用來獲取返回參數中所需要的key,步驟很簡單,按照網址中的提示來就可以了。

 

二、獲取JSON數據

  獲取網絡數據,需要用到UnityWebRequest類,通過它的Get方法可以得到網址中的信息,返回的是含有URI中數據的UnityWebRequest對象。

UnityWebRequest re = UnityWebRequest.Get(string uri);

  接下來使用它的 downloadHandler 方法來管理從遠程服務器中接受的數據(想了解更多用法可以去看官方文檔)

string JsonData = re.downloadHandler.text;  //text返回的是通過UTF-8編碼的字符串

  好了,現在我們已經擁有JSON類型的天氣數據了

 

三、JSON對象序列化和反序列化

  序列化是將對象轉化為字節序列的過程。在Unity中可以使用其自帶的類進行序列化和反序列化  -> JsonUtility,下面是它包含的方法

 

 

  我們只需要使用它的FormJson方法來創建對象,官方給出的案例是

using UnityEngine;

[System.Serializable]
public class PlayerInfo
{
    public string name;
    public int lives;
    public float health;

    public static PlayerInfo CreateFromJSON(string jsonString)
    {
        return JsonUtility.FromJson<PlayerInfo>(jsonString);
    }

    // Given JSON input:
    // {"name":"Dr Charles","lives":3,"health":0.8}
    // this example will return a PlayerInfo object with
    // name == "Dr Charles", lives == 3, and health == 0.8f.
}

  在內部,此方法使用 Unity 序列化器;因此創建的類型必須受序列化器支持,它必須是使用 Serializable 屬性標記的普通類/結構,並且為public類型,天氣數據也可以用類似方法進行讀取

//定義結構體存儲json返回的天氣信息
    [Serializable]
    public struct MainJson
    {
        public string status;
        public string count;
        public string info;
        public string infocode;
        public List<LiveInfo> lives;
    }

    [Serializable]
    public struct LiveInfo
    {
        public string provice;
        public string city;
        public string adcode;
        public string weather;
        public string temperature;
        public string winddirection;
        public string windpower;
        public string humidity;
        public string reporttime;
    }

    MainJson j = JsonUtility.FromJson<MainJson>(re.downloadHandler.text);
           
      if (j.status == "0")
       {
           print(j.info);
       }
       else
       {
          string cityName = j.lives[0].provice + j.lives[0].city;
       }

  這是我寫的一個小demo(不是完整代碼)。

  值得注意的是,結構體中定義的變量名要和JSON中的數據一致,名稱一致,不需要的數據可以不定義。 下面是效果圖

                  

 

 

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM