Android Studio中LibGDX加载uiskin.json遇SerializationException错误求助
解决LibGDX加载uiskin.json时的JSON解析错误
从你的错误日志能看出,核心问题出在JSON文件的解析阶段——即便你重新格式化了JSON结构,依然在第二行触发解析失败。这通常不是语法问题,而是文件编码或隐藏字符导致的,下面是具体的排查和解决步骤:
1. 移除JSON文件的UTF-8 BOM标记
Windows下很多编辑器(比如系统自带记事本)保存UTF-8文件时,会自动添加字节顺序标记(BOM),而LibGDX的JsonReader无法识别这个隐藏标记,会把它当作JSON内容的一部分,直接导致解析失败。
解决方法:
- 用专业编辑器(比如Notepad++、VS Code)打开
uiskin.json - 在Notepad++中,选择顶部菜单「编码」→「UTF-8无BOM」后保存文件
- 在VS Code中,点击右下角的编码标识(比如「UTF-8」),选择「通过编码保存」→「UTF-8」(注意不要选带BOM的选项)
2. 再次校验JSON语法正确性
虽然你已经格式化了JSON,但还是可以再确认一遍细节:
- 用Android Studio的JSON校验功能(打开文件后,右侧会自动提示语法错误)
- 确保所有字符串都用双引号包裹,逗号没有遗漏或多余,大括号/中括号完全配对
你格式化后的JSON语法看起来是正确的,这里再贴一份标准格式供你对照:
{ "com.badlogic.gdx.graphics.Color": { "white": { "a": 1, "b": 1, "g": 1, "r": 1 }, "red": { "a": 1, "b": 0, "g": 0, "r": 1 }, "black": { "a": 1, "b": 0, "g": 0, "r": 0 } }, "com.badlogic.gdx.scenes.scene2d.ui.Label$LabelStyle": { "default": { "font": "default-font" } }, "com.badlogic.gdx.scenes.scene2d.ui.TextButton$TextButtonStyle": { "default": { "down": "default-round-down", "up": "default-round", "font": "default-font", "fontColor": "white" }, "toggle": { "down": "default-round-down", "up": "default-round", "checked": "default-round-down", "font": "default-font", "fontColor": "white", "downFontColor": "red" } }, "com.badlogic.gdx.scenes.scene2d.ui.ProgressBar$ProgressBarStyle": { "default-horizontal": { "background": "default-slider", "knob": "default-slider-knob" }, "default-vertical": { "background": "default-slider", "knob": "default-round-large" } } }
3. 检查文件路径与大小写
确保:
UI文件夹和uiskin.json确实在你的assets目录下- 路径大小写和代码中完全一致(桌面平台对大小写敏感,比如不要代码里写
UI,实际文件夹是ui)
4. 优化Skin加载代码
你当前的加载顺序是正确的,但可以尝试用Skin的构造函数一次性加载,避免分步加载可能出现的问题:
// 先获取图集资源 TextureAtlas atlas = MathsVsZombies.manager.get("UI/uiskin.atlas", TextureAtlas.class); // 直接通过构造函数加载Skin,同时传入JSON和图集 this.skin = new Skin(Gdx.files.internal("UI/uiskin.json"), atlas); // 再添加自定义字体 this.skin.add("default-font", MathsVsZombies.font24);
5. 排查其他隐藏问题
如果以上步骤都无效,可以:
- 新建一个空白JSON文件,把正确的JSON内容复制进去(规避原文件的隐藏字符),再保存为UTF-8无BOM格式
- 确认LibGDX版本和Android Studio 2.3.3兼容(你的AS版本较旧,建议使用对应版本的稳定版LibGDX)
按照这些步骤排查,应该能解决JSON解析的问题。如果之后出现资源找不到的错误,再检查atlas文件中的资源名称是否和JSON里的引用一致。
内容的提问来源于stack exchange,提问作者Shahzeb Manjlai
相关产品推荐
相关产品推荐

