Unity3D解析含重复字段嵌套JSON及去除转义符的方法
一、解析包含重复字段的嵌套JSON
首先得先修正你现有代码里的一个明显问题:datagame类里重复定义了num_id字段,这在C#里是不允许编译的,直接删掉其中一个就行。
接下来看你提供的JSON结构,它外层包含result、num_id、active,然后嵌套了datagame对象,而且datagame里的data字段其实是字符串形式的JSON数组,不是直接的对象数组,所以不能直接用dataIn[]接收,得先转一步。
咱们先重新定义对应序列化类:
[System.Serializable] public class GameResponse { // 对应JSON外层的字段 public string result; public string num_id; public string active; // 嵌套的datagame对象 public datagame datagame; } [System.Serializable] public class datagame { // 注意原JSON里datagame有个id字段,你之前的类没定义,得加上 public string id; public string delay; public string status; public string trac; public string num_id; // 先以字符串接收data,因为原JSON里它是带转义的数组字符串 public string data; } [System.Serializable] public class dataIn { public string ID; public string Sort; public string UnitID; }
二、去除JSON中的\r\n与转义符\
接下来处理datagame.data里的换行符和转义符,咱们写个简单的辅助方法来清理:
private string CleanJsonRawString(string rawJsonStr) { // 先去掉所有\r\n换行符 string cleaned = rawJsonStr.Replace("\r\n", ""); // 去掉转义用的\(注意C#里要写两个\\来表示一个\) cleaned = cleaned.Replace("\\", ""); return cleaned; }
完整解析流程
把两步结合起来,完整的解析代码大概是这样:
// 假设你已经拿到了要解析的JSON字符串,比如叫jsonContent GameResponse fullResponse = JsonUtility.FromJson<GameResponse>(jsonContent); // 清理data字段的字符串 string cleanedData = CleanJsonRawString(fullResponse.datagame.data); // 把清理后的字符串解析成dataIn数组 dataIn[] gameDataArray = JsonUtility.FromJson<dataIn[]>(cleanedData); // 测试输出看看结果 foreach (var dataItem in gameDataArray) { Debug.Log($"ID: {dataItem.ID}, Sort: {dataItem.Sort}, UnitID: {dataItem.UnitID ?? "未设置"}"); }
几个注意点
- JsonUtility是大小写敏感的,所以类的字段名必须和JSON里的键完全一致,比如JSON里是
ID,你就不能写成id。 - 如果
dataIn里的UnitID是可选字段(有的对象没有),把dataIn改成类而不是struct会更稳妥,struct的字段不能为null,可能导致解析异常。 - 原JSON外层和
datagame里都有num_id,这没问题,因为它们属于不同的类,各自定义就好,之前的问题只是你在同一个类里重复定义了这个字段。
内容的提问来源于stack exchange,提问作者H-ndi Santoso
相关产品推荐
相关产品推荐

