Unity中如何解析嵌套JSON并提取数组与w值?
Unity中JsonUtility解析嵌套JSON失败的解决方法
问题根源
你拿到的JSON里,data字段的值是转义后的JSON字符串(被双引号包裹,内部有\转义符),不是直接的JSON对象。JsonUtility无法直接将这种字符串映射到Data类实例,所以解析后data字段为空。
解决方法
方法一:分两次解析(推荐,无需修改原始JSON)
- 先定义外层结构的类,把
data字段设为字符串类型:
[Serializable] public class OuterJsonData { public string action; public string code; public string data; // 先以字符串接收嵌套的JSON内容 public string desc; public string sid; }
- 先解析外层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
相关产品推荐
相关产品推荐

