Unity中C#获取与逐个解析JSON数据的实现咨询
在Unity中获取并逐个解析JSON数组数据
看起来你在Unity里用JsonUtility处理JSON数组的时候走了点弯路,我来帮你理顺这个流程,给出更简洁高效的实现方案:
首先得指出你当前代码里的两个小问题:一是你没必要先把ExampleClass转成JSON再解析回来——这完全是冗余步骤;二是Unity内置的JsonUtility不能直接解析纯JSON数组,它需要一个类来包裹这个数组,这应该是你遇到的核心卡点。
下面给你两种可行的实现方案,你可以根据需求选择:
方案一:用Unity内置JsonUtility(无需额外插件)
首先我们需要定义一个可序列化的包裹类,让JsonUtility能正确识别数组结构:
[System.Serializable] public class ShapeDataWrapper { // 这个数组对应JSON里的元素列表 public int[] shapes; }
然后直接解析原始JSON字符串,遍历每个元素处理业务逻辑:
// 示例JSON数组字符串,1=蓝色圆形,2=红色圆形 string jsonString = "[1, 1, 1, 2, 1, 1, 1, 2, 1, 2, 1, 1, 1, 2, 1, 1]"; // 因为JsonUtility只支持解析对象形式的JSON,我们手动给数组加一个包裹键 string wrappedJson = $"{{\"shapes\": {jsonString}}}"; // 解析到包裹类实例 ShapeDataWrapper shapeData = JsonUtility.FromJson<ShapeDataWrapper>(wrappedJson); // 检查解析是否成功 if (shapeData != null && shapeData.shapes != null) { // 逐个遍历数组中的每个元素 for (int i = 0; i < shapeData.shapes.Length; i++) { int currentShape = shapeData.shapes[i]; string shapeDescription; // 根据数值判断图形类型 switch (currentShape) { case 1: shapeDescription = $"第{i+1}个图形:蓝色圆形"; // 这里可以添加你的业务逻辑,比如生成蓝色圆形对象 break; case 2: shapeDescription = $"第{i+1}个图形:红色圆形"; // 这里添加红色圆形的业务逻辑 break; default: shapeDescription = $"第{i+1}个图形:未知类型({currentShape})"; break; } Debug.Log(shapeDescription); } } else { Debug.LogError("JSON解析失败,请检查字符串格式是否正确"); }
关键点说明:
- 用类包裹数组是
JsonUtility的硬性限制,它只支持解析对象格式的JSON,所以我们手动给原始数组加了shapes键来匹配类结构。 - 去掉了你代码里冗余的
JsonUtility.ToJson再转回的步骤,直接解析原始字符串更高效。
方案二:用Newtonsoft.Json(更灵活,需导入插件)
如果你觉得包裹类太繁琐,可以使用Newtonsoft.Json(Unity官方支持的第三方JSON库),它能直接解析纯数组:
- 先通过Unity Package Manager安装
Newtonsoft.Json for Unity(在Package Manager的搜索栏就能找到)。 - 然后使用以下代码:
using Newtonsoft.Json; using UnityEngine; public class JsonParser : MonoBehaviour { void Start() { string jsonString = "[1, 1, 1, 2, 1, 1, 1, 2, 1, 2, 1, 1, 1, 2, 1, 1]"; // 直接解析成int数组,无需包裹类 int[] shapes = JsonConvert.DeserializeObject<int[]>(jsonString); foreach (int shapeType in shapes) { switch (shapeType) { case 1: Debug.Log("蓝色圆形"); // 这里添加蓝色圆形的业务逻辑 break; case 2: Debug.Log("红色圆形"); // 这里添加红色圆形的业务逻辑 break; } } } }
优缺点对比:
- JsonUtility:Unity内置,无需额外依赖,性能较好,但对JSON格式要求严格(必须是对象包裹)。
- Newtonsoft.Json:更灵活,支持直接解析数组、复杂JSON结构,但需要导入第三方包,性能略低于内置工具(一般场景下可以忽略)。
内容的提问来源于stack exchange,提问作者Ginxxx
相关产品推荐
相关产品推荐

