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

Unity中如何从Web读取JSON值并单独读取数组及单个属性?

解决Unity中JSON单个属性与数组的读取问题

看起来你已经走完了大半流程——成功拿到了JSON数据,也定义好了对应的实体类,接下来只需要把JSON字符串解析成对应的对象/数组,就能轻松访问单个属性啦。我分两种核心场景给你说明:

一、读取单个对象的属性(比如你当前请求的星战单个人物数据)

你请求的这个接口返回的是单个人物对象,不是数组,所以直接用JsonUtility.FromJson把JSON字符串解析成你定义好的RootObject实例就行:

修改你的GetNames协程里的代码:

if(www.isDone) {
    string jsonResult = System.Text.Encoding.UTF8.GetString(www.downloadHandler.data);
    Debug.Log(jsonResult);
    
    // 把JSON解析为RootObject实例
    RootObject personData = JsonUtility.FromJson<RootObject>(jsonResult);
    
    // 现在可以直接访问单个属性啦
    Debug.Log("人物姓名:" + personData.name);
    Debug.Log("身高:" + personData.height);
    Debug.Log("体重:" + personData.mass);
}

这样你就能直接拿到每个属性的值,是不是很直观?

二、读取数组类型的属性(比如包含4个值的name数组)

如果你的JSON里有数组类型的字段(比如{"name": ["Luke", "Leia", "Han", "Obi-Wan"]}),或者你请求的是纯数组形式的JSON,分两种情况处理:

情况1:JSON是带数组字段的对象

先定义一个包含数组字段的可序列化类:

[System.Serializable]
public class NameListContainer {
    // 字段名要和JSON里的数组键名完全一致
    public string[] name;
}

然后解析并遍历数组:

NameListContainer container = JsonUtility.FromJson<NameListContainer>(jsonResult);
// 逐个读取数组里的name值
foreach(string singleName in container.name) {
    Debug.Log("姓名:" + singleName);
}

情况2:JSON本身就是纯数组(比如["a","b","c","d"])

这时候你写的JsonHelper工具类就派上用场了,直接用它解析成数组:

string[] nameArray = JsonHelper.getJsonArray<string>(jsonResult);
// 遍历数组输出每个值
foreach(string name in nameArray) {
    Debug.Log(name);
}

小提醒

  • 一定要保证你的实体类字段名和JSON里的键名完全匹配(大小写也不能错,比如JSON里是name,类里就不能写成Name),否则JsonUtility会解析不到对应的值。
  • 如果JSON里有嵌套的对象或数组,你需要对应嵌套定义可序列化的类哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:46:59