使用JsonUtility.FromJson方法不需要额外引用第三方库。该方法只能读取json对象,而不能读取json数组。
假如我们有如下的json数组:
[
{"id":1, "name":"first2021", "level":5, "score":100, "isUser":false},
{"id":2, "name":"second2022", "level":5, "score":90, "isUser":false},
{"id":3, "name":"third2023", "level":5, "score":50, "isUser":false},
{"id":4, "name":"fourth2024", "level":5, "score":30, "isUser":true},
{"id":5, "name":"fifth2025", "level":5, "score":20, "isUser":false},
{"id":6, "name":"sixth2026", "level":5, "score":10, "isUser":false}
]
需要调整为:
{"rankDatas":[
{"id":1, "name":"first2021", "level":5, "score":100, "isUser":false},
{"id":2, "name":"second2022", "level":5, "score":90, "isUser":false},
{"id":3, "name":"third2023", "level":5, "score":50, "isUser":false},
{"id":4, "name":"fourth2024", "level":5, "score":30, "isUser":true},
{"id":5, "name":"fifth2025", "level":5, "score":20, "isUser":false},
{"id":6, "name":"sixth2026", "level":5, "score":10, "isUser":false}
]}
我们将该文件放到Resources的json目录下,如下图所示:
我们创建RankData类存放反序列化之后的数据:
[System.Serializable]
public class RankData
{
public int id;
public string name;
public int level;
public int score;
public bool isUser;
}
[System.Serializable]
public class RankDataList
{
public RankData[] rankDatas;
}
其中RankDataList -> rankDatas的名字必须和json文件中最外层的key保持一致,否则会读取不到数据。
读取json文件并解析的逻辑如下:
TextAsset jsonText = Resources.Load<TextAsset>("json/rank_info");
if(jsonText != null)
{
string jsonData = jsonText.text;
Debug.Log(jsonData);
RankDataList rankDataList = JsonUtility.FromJson<RankDataList>(jsonData);
foreach(var item in rankDataList.rankDatas)
{
Debug.Log("id:" + item.id);
}
}
else
{
Debug.LogError("Can't find JSON file.");
}