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

Unity中解析含小数点的JSON时返回空值问题求助

解决Unity中JSON解析字符串数组遇小数为空的问题

嘿,我在Unity开发中也碰到过类似的JSON解析坑,咱们一步步拆解问题,找到解决方案!

先排查最容易忽略的JSON格式问题

首先,别着急看代码,先确认你的JSON本身有没有隐形错误。有时候看起来格式类似,但带小数的JSON可能存在:

  • 多余的尾逗号(比如最后一个元素后面多了个逗号)
  • 小数格式不合法(比如1.2.3这种多小数点的情况)
  • 元素类型不统一(比如有的是字符串带引号,有的是数字不带引号)

建议找个在线JSON校验工具(比如JSONLint)把你的JSON粘进去检查,先排除格式层面的问题。

核心问题:类型不匹配

这是最常见的原因!你要解析成字符串数组,但如果JSON里的小数是数字类型(没有被双引号包裹),Unity的解析工具会因为类型不匹配直接返回空数组:

  • 正确的字符串数组JSON应该是:["1.5", "3.2"](每个小数都在引号里)
  • 如果你的JSON是:[1.5, 3.2](纯数字数组),强行解析成string[]必然失败

对应解决方案:

  1. 修改JSON格式:把所有小数元素用双引号包裹,明确为字符串类型
  2. 调整解析目标类型:如果JSON就是数字数组,那就解析成float[]或double[],之后再转成字符串数组:
    // 示例:用JsonUtility解析数字数组再转字符串
    [Serializable]
    public class FloatArrayWrapper
    {
        public float[] values;
    }
    
    var wrapper = JsonUtility.FromJson<FloatArrayWrapper>(jsonString);
    string[] stringArray = wrapper.values.Select(f => f.ToString()).ToArray();
    

Unity JsonUtility的局限性要注意

如果你用的是Unity自带的JsonUtility,它有个很容易踩的坑:不支持直接解析顶级数组!也就是说,你不能直接写:

// 错误写法:JsonUtility无法直接解析顶级数组
string[] arr = JsonUtility.FromJson<string[]>(jsonString);

哪怕是合法的字符串数组,这样写也可能返回空。必须用一个可序列化的包装类来包裹数组:

// 正确写法:用包装类解析
[Serializable]
public class StringArrayWrapper
{
    public string[] values;
}

var wrapper = JsonUtility.FromJson<StringArrayWrapper>(jsonString);
string[] result = wrapper.values; // 这里就能拿到正确的数组了

试试更强大的Newtonsoft.Json

如果你的JSON结构比较灵活,建议改用Unity官方提供的Newtonsoft.Json包(在Package Manager里搜索Newtonsoft.Json就能安装)。它对顶级数组、类型转换的支持要好得多:

// 示例1:直接解析字符串数组(JSON元素是带引号的字符串)
string[] stringArray = JsonConvert.DeserializeObject<string[]>(jsonString);

// 示例2:把数字数组转成字符串数组(JSON元素是纯数字)
var jsonArray = JArray.Parse(jsonString);
string[] stringArray = jsonArray.Select(item => item.ToString()).ToArray();

调试技巧帮你定位问题

解析前后加日志,能快速找到问题所在:

Debug.Log("原始JSON:" + jsonString);
var result = ...; // 你的解析代码
Debug.Log("解析结果长度:" + (result?.Length ?? 0));
if (result != null)
{
    foreach (var item in result)
    {
        Debug.Log("元素:" + item);
    }
}

另外,打开Unity Console的详细日志(Edit > Project Settings > Player > Other Settings > Configuration > Logging > Verbose),有时候JsonUtility解析失败会有隐藏的警告信息。

内容的提问来源于stack exchange,提问作者Maxi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:55:47