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
相关产品推荐
相关产品推荐

