无法解析JSONTokener(InputStream)构造方法问题求助
看起来你遇到了Maven依赖冲突导致的类包覆盖问题——原本正常使用的org.json.JSONTokener(InputStream)构造方法,因为其他依赖引入了同名但功能不全的org.json实现(比如hive或codehaus的版本),导致正确的org.json包被排挤了。下面是一步步的解决方法:
1. 明确引入官方org.json依赖
首先,在你的pom.xml中直接添加官方的org.json依赖,指定一个稳定版本(可以用你之前项目正常运行时的版本,或者最新的稳定版):
<dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>20240303</version> <!-- 替换为你需要的版本 --> </dependency>
直接添加这个依赖会让Maven优先使用官方包,避免被其他依赖的同名包覆盖。
2. 排除冲突依赖中的org.json实现
接下来,找到引入hive或codehaus版org.json的依赖,在pom.xml中排除它们的org.json模块。比如如果是hive-jdbc带来的冲突,修改对应的依赖配置:
<dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-jdbc</artifactId> <version>你的hive版本号</version> <exclusions> <exclusion> <groupId>org.json</groupId> <artifactId>json</artifactId> </exclusion> </exclusions> </dependency>
如果不确定是哪个依赖引入的冲突,可以执行mvn dependency:tree命令,在输出中搜索org.json,找到所有包含它的依赖项,逐一排查排除。
3. 刷新Maven并验证依赖
在IntelliJ中,点击Maven面板的「Reload All Maven Projects」按钮,或者右键项目 → Maven → Reload Project,让依赖重新导入。
之后,你可以在IntelliJ的Maven依赖列表中搜索json,确认org.json:json已经被正确引入,并且没有其他同名的org.json包存在。
4. 修正代码导入语句
检查你的代码导入,确保使用的是官方org.json包的类:
import org.json.JSONObject; import org.json.JSONTokener;
如果IntelliJ之前自动导入了错误的包(比如hive的),手动修改导入语句,还可以在Settings → Editor → Code Style → Java → Imports中,将org.json设置为优先导入,或者禁用其他同名包的自动导入提示。
5. 验证代码运行
最后,重新运行你的代码,new JSONTokener(getClass().getResource("/identification/carrier.json").openStream())应该就能正常使用InputStream构造方法了。
内容的提问来源于stack exchange,提问作者Sam

