You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

解析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

火山引擎 最新活动