C#新手求助:Unity解析Google Sheets JSON实现游戏排行榜
解决Unity中Google Sheets JSON数据嵌套List的访问问题
问题根源
你的代码存在两个核心问题:
- 自定义结构体未标记可序列化:Unity的
JsonUtility无法处理没有[Serializable]标签的自定义结构体,导致values字段无法被正确反序列化。 - 嵌套List的访问逻辑缺失:你没有通过索引遍历嵌套列表,来提取表头和对应的数据字段。
修复步骤
1. 给Data结构体添加Serializable标签
修改结构体,添加[System.Serializable]特性,让JsonUtility能够识别并处理它:
using System.Collections.Generic; using UnityEngine; [System.Serializable] public struct Data{ public string range; public string majorDimension; public List<List<string>> values; }
2. 修改getData方法,正确提取目标字段
更新协程,加入嵌套List的遍历逻辑,提取Name、Score和Event(Optional)字段:
IEnumerator getData() { UnityWebRequest www = UnityWebRequest.Get(googleSheetURL); yield return www.SendWebRequest(); if (www.isNetworkError || www.isHttpError) { Debug.Log(www.error); } else { Data data = JsonUtility.FromJson<Data>(www.downloadHandler.text); // 校验数据有效性 if(data.values == null || data.values.Count < 2) { Debug.Log("未获取到有效数据"); yield break; } // 获取表头行,用于定位字段位置 List<string> headerRow = data.values[0]; int nameColIndex = headerRow.IndexOf("Name"); int eventColIndex = headerRow.IndexOf("Event(Optional)"); int scoreColIndex = headerRow.IndexOf("Score"); // 遍历所有数据行(跳过第0行表头) for(int rowIndex = 1; rowIndex < data.values.Count; rowIndex++) { List<string> currentRow = data.values[rowIndex]; // 避免索引越界,检查当前行的列数是否足够 if(currentRow.Count > Mathf.Max(nameColIndex, eventColIndex, scoreColIndex)) { // 提取字段值 string playerName = currentRow[nameColIndex]; string eventName = currentRow[eventColIndex]; // 将分数转为整数,方便排行榜排序 int playerScore = int.TryParse(currentRow[scoreColIndex], out int score) ? score : 0; // 这里可以将数据存入你的排行榜变量,比如添加到List<LeaderboardEntry>中 Debug.Log($"玩家:{playerName} | 活动:{eventName} | 分数:{playerScore}"); } } } www.Dispose(); }
关键说明
- Serializable标签:这是Unity序列化系统的要求,没有它,JsonUtility会忽略自定义类型的所有字段,导致
values始终为null。 - 嵌套List的访问:
data.values是一个二维列表,data.values[0]是表头行,data.values[1]及以后是用户提交的数据行。通过IndexOf获取表头字段的索引,能适配表头列顺序变化的情况,避免硬编码索引的弊端。 - 数据校验:加入空值和长度检查,防止因数据格式异常导致的运行时错误。
- 类型转换:将分数转为整数类型,更适合后续的排行榜排序、展示等操作。
内容的提问来源于stack exchange,提问作者ozzyys
相关产品推荐
相关产品推荐

