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

Unity中如何解析嵌套JSON并提取数组与w值?

Unity中JsonUtility解析嵌套JSON失败的解决方法

问题根源

你拿到的JSON里,data字段的值是转义后的JSON字符串(被双引号包裹,内部有\转义符),不是直接的JSON对象。JsonUtility无法直接将这种字符串映射到Data类实例,所以解析后data字段为空。

解决方法

方法一:分两次解析(推荐,无需修改原始JSON)

  1. 先定义外层结构的类,把data字段设为字符串类型:
[Serializable]
public class OuterJsonData
{
    public string action;
    public string code;
    public string data; // 先以字符串接收嵌套的JSON内容
    public string desc;
    public string sid;
}
  1. 先解析外层JSON,再单独解析data字段的字符串:
// 第一步:解析外层数据
OuterJsonData outerData = JsonUtility.FromJson<OuterJsonData>(yourJsonString);

// 第二步:解析内层的data字符串
Data innerData = JsonUtility.FromJson<Data>(outerData.data);

// 遍历获取所有w值
foreach (var rtItem in innerData.cn.st.rt)
{
    foreach (var wsItem in rtItem.ws)
    {
        foreach (var cwItem in wsItem.cw)
        {
            Debug.Log(cwItem.w); // 输出:今天、天气、怎么样、?
        }
    }
}

注意:原Data类中的rt字段需要改成数组类型——JSON里rt是[{...}](数组),所以把public RT rt;改为public RT[] rt;,否则内层解析会失败。

方法二:修改原始JSON格式(若能控制接口输出)

如果可以让接口返回的JSON里,data字段直接是JSON对象而非转义后的字符串(去掉data值的外层双引号和内部\转义符),那么你原来的JsonData类就能直接解析,无需额外处理。修改后的JSON示例:

{"action":"result","code":"0","data":{"seg_id":2,"cn":{"st":{"rt":[{"ws":[{"cw":[{"sc":0.00,"w":"今天","wp":"n","rl":"0","wb":9,"wc":0.00,"we":52}],"wb":9,"we":52},{"cw":[{"sc":0.00,"w":"天气","wp":"n","rl":"0","wb":53,"wc":0.00,"we":92}],"wb":53,"we":92},{"cw":[{"sc":0.00,"w":"怎么样","wp":"n","rl":"0","wb":93,"wc":0.00,"we":156}],"wb":93,"we":156},{"cw":[{"sc":0.00,"w":"?","wp":"p","rl":"0","wb":156,"wc":0.00,"we":156}],"wb":156,"we":156}]}],"bg":"160","type":"0","ed":"1900"}},"ls":true},"desc":"success","sid":"rta02434f94@dx5bb219816a261aba00"}

额外注意事项

  • 所有用于JsonUtility解析的类及嵌套类,必须添加[Serializable]特性(你已经正确添加)。
  • 类的字段名必须和JSON中的键完全一致,大小写敏感。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 11:46:04