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

Unity中JSON实现物品数据库遭遇KeyNotFoundException求助

解决Unity中LitJson读取JSON时的KeyNotFoundException问题

这是个典型的JSON字段层级匹配错误导致的异常,咱们来一步步搞定它:

问题根源

看你ConstructItemDatabase方法里的这段代码:

(int)itemData[i]["stats"]["value"]

你试图从stats对象里读取value字段,但回头看你的Items.json结构,value是和id、title平级的顶级字段,根本不在stats内部!LitJson找不到这个不存在的键,自然就抛出KeyNotFoundException了。

修复方案

修改ConstructItemDatabase方法中传递给Item构造函数的value参数,直接从根节点读取,而不是从stats里取:

修改前的错误代码片段

database.Add(new Item(
    (int)itemData[i]["id"],
    itemData[i]["title"].ToString(),
    (int)itemData[i]["stats"]["value"], // 这里的层级错误
    (int)itemData[i]["stats"]["power"],
    (int)itemData[i]["stats"]["defence"],
    (int)itemData[i]["stats"]["vitality"],
    itemData[i]["description"].ToString(),
    (bool)itemData[i]["stackable"],
    (int)itemData[i]["rarity"],
    itemData[i]["slug"].ToString()
));

修改后的正确代码

database.Add(new Item(
    (int)itemData[i]["id"],
    itemData[i]["title"].ToString(),
    (int)itemData[i]["value"], // 直接从根节点读取value
    (int)itemData[i]["stats"]["power"],
    (int)itemData[i]["stats"]["defence"],
    (int)itemData[i]["stats"]["vitality"],
    itemData[i]["description"].ToString(),
    (bool)itemData[i]["stackable"],
    (int)itemData[i]["rarity"],
    itemData[i]["slug"].ToString()
));

额外调试小技巧

以后遇到类似的JSON解析问题,可以用这些方法快速定位:

  • 在循环里添加Debug.Log(itemData[i].ToJson());,打印当前解析的JSON节点内容,直观确认字段的实际层级
  • 给LitJson的读取代码加个安全判断,比如用itemData[i].ContainsKey("value")先检查键是否存在,避免直接访问抛出异常
  • 用Visual Studio的断点,查看itemData[i]的内部结构,清晰确认每个字段的位置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:20:56