You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity使用JsonUtility.FromJson无法提取REST API返回JSON的coord字段值

问题原因
  • 核心错误是类上的特性用错了:[SerializeField] 是用于修饰类的字段/属性的特性,你需要给自定义的可序列化类添加 [System.Serializable] 特性才能让Unity的JsonUtility正确识别并解析嵌套类结构。
  • 额外问题:你当前的代码在请求报错的情况下依然会执行JSON解析逻辑,可能会引发空引用异常,建议把解析逻辑移到请求成功的分支内。
修复后的完整代码
using UnityEngine;
using UnityEngine.Networking;
using System.Collections;

public class GetMethod : MonoBehaviour
{
    public WeatherInfo Info;
    void GetData() => StartCoroutine(GetData_Coroutine());
    IEnumerator GetData_Coroutine()
    {
        string uri = "http://localhost:3000/api/weather/current?lat=22.426522&lon=114.234446&unit=metric";
        using (UnityWebRequest request = UnityWebRequest.Get(uri))
        {
            yield return request.SendWebRequest();
            if (request.isNetworkError || request.isHttpError)
            {
                Debug.Log(request.error);
            }
            else
            {
                Debug.Log(request.downloadHandler.text);
                Info = JsonUtility.FromJson<WeatherInfo>(request.downloadHandler.text);
                Debug.Log(Info.coord.lon.ToString());
            }
        }
    }
}

// 替换原有的[SerializeField]为序列化类特性
[System.Serializable]
public class WeatherInfo
{
    public Coord coord;
    public string name;
}

// 替换原有的[SerializeField]为序列化类特性
[System.Serializable]
public class Coord
{
    public float lon;
    public float lat;
}
额外注意事项
  • 如果你后续需要解析JSON里的weather数组、main结构体,也要对应定义加了[System.Serializable]的类,数组类型用public WeatherItem[] weather即可。
  • 若JSON字段名和C#类字段名大小写不一致,Unity自带的JsonUtility不支持字段映射,要么统一字段大小写,要么换用Unity 2020+内置的Newtonsoft.Json进行解析。

内容的提问来源于stack exchange,提问作者mak Felix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 11:15:03