You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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库),它能直接解析纯数组:

  1. 先通过Unity Package Manager安装Newtonsoft.Json for Unity(在Package Manager的搜索栏就能找到)。
  2. 然后使用以下代码:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:57:02