解析JSON字符串时遭遇org.json.JSONException错误求助
解决org.json.JSONException: Expected literal value at character 1的问题
我来帮你搞定这个解析错误的问题~这个报错提示说明JSON字符串的第一个字符就不符合解析器的预期,结合你的代码场景,大概率是以下几个原因,对应解决办法如下:
1. Java字符串的转义写法有误
你当前定义的Java字符串里,URL部分写了https:\\/\\/,这会让Java最终生成的JSON字符串里出现https:\/\/(也就是转义后的斜杠)。虽然JSON规范允许这种写法,但org.json库有时候对这种转义的处理会出问题,而且其实你完全没必要转义斜杠。
直接修正成下面的写法就好:
String json = "{\"forms\":[{\"url\":\"https://pokeapi.co/api/v2/pokemon-form/1/\",\"name\":\"bulbasaur\"}]}";
解释:在Java字符串里,只需要转义双引号(用\"),斜杠/是不需要转义的,直接写https://就能生成标准合法的JSON字符串。
2. 字符串开头藏了不可见的BOM字符
如果你的JSON字符串是从文件复制、或者从外部接口读取来的,很可能开头带有BOM(字节顺序标记)——这是一个看不见的特殊字符,解析器会把它当成无效内容,导致在第1个字符就报错。
解决办法:
- 如果是从文件读取,确保用
InputStreamReader指定编码为UTF-8(注意是不带BOM的UTF-8); - 如果是硬编码的字符串,把内容复制到纯文本编辑器(比如Notepad++),开启“显示所有字符”的功能,检查开头有没有多余的奇怪标记,删掉就行。
3. 先验证JSON的实际格式
你可以先把定义的字符串打印出来,看看实际内容是不是正确的:
System.out.println(json);
正常输出应该是这样的:
{"forms":[{"url":"https://pokeapi.co/api/v2/pokemon-form/1/","name":"bulbasaur"}]}
确认输出的内容是标准JSON格式,没有多余字符或者语法错误。
4. 检查org.json库的版本
旧版本的org.json库可能存在一些兼容性问题,建议升级到最新的稳定版本(比如20230618版本)。如果用Maven的话,依赖可以这么写:
<dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>20230618</version> </dependency>
按照上面的方法调整后,再执行JSONObject root = new JSONObject(json);应该就能正常解析啦。
内容的提问来源于stack exchange,提问作者Dtlyl2




