当前位置: 首页 > 知识库问答 >
问题:

为什么我的JSONParser会抛出NoClassDefFoundError?

马沛
2023-03-14

我试图在Java中将扫描字符串转换为JSONObject,并从JSON Simple导入JSON模块。我已经在构建路径中添加了JSON-simple-1.1.1.jar。然而,当我试图传递内联字符串时。我的内联字符串如下:{“events”:[{“url”:“/操纵多云国家”,“visitorId”:“03c0b5e0-3eeb-382a-8c6d-35e4bb189cf6”,“timestamp”:1515042087205},{“url”:“/race lazy control”,“visitorId”:“0832d11b-017a-388a-8a9e-77e5a1f6f4f4”,“timestamp”:1515042342655}}应该是我试图转换为JSONObject的一组数据。

编译器显示:异常在线程"main"java.lang.NoClassDefFoundError: org/json/Simple/JSONObject at Solution.main(Solution.java:45)引起:java.lang.ClassNotFoundException:org.json.simple.JSONObject atjava.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:602)atjava.base/jdk.internal.loader.ClassLoaders$AppClassLoader.load(ClassLoaders.java:178)atjava.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)...1更多

我如何修复它,或者有更好的解决方案来转换它吗?请帮帮我!

import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;

public class Solution {
public static void main(String[] args) {
try {
        //URL url = new URL(
                    "My API");
        /**
        *{"events":[{"url":"/manipulate-cloudy-country","visitorId":"03c0b5e0-3eeb-382a-8c6d-35e4bb189cf6","timestamp":1515042087205},...{"url":"/shoe-boundless-curtain","visitorId":"e367b3c8-3d48-345d-937c-0c4f6cce216a","timestamp":1515042137934},{"url":"/race-lazy-control","visitorId":"0832d11b-017a-388a-8a9e-77e5a1f6f9f4","timestamp":1515042342655}]}
        **/
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            conn.connect();

            int responseCode = conn.getResponseCode();
            if (responseCode != 200) {
                throw new RuntimeException("HttpResponseCode: " + responseCode);
            } else {
                String inline = "";
                Scanner scanner = new Scanner(url.openStream());
                while (scanner.hasNext()) {
                    inline += scanner.nextLine();
                }
                // Close the scanner
                scanner.close();

                JSONObject obj = new JSONObject();
                JSONParser p = new JSONParser();
                p.parse(inline);


            }
        } catch (Exception e) {
            e.printStackTrace();
        } ```

共有1个答案

呼延修然
2023-03-14

你的问题与JSON解析无关,而是如何使用Java库。

您发布的代码显示您正在导入类似org.json.simple的类。JSONObject不属于Java标准库的一部分,因此您需要将它们提供给Java运行时,通常需要将jar包括在所谓的类路径中,jar基本上是一个包含类文件(.class文件,Java文件的编译版本)的zip文件,Java运行时在该路径中查找要加载的类。

下面是一个示例,说明如何运行您的程序,以防您已经在libs/simple-json.jar上拥有了simple-json jar,并且您已经编译了Solution类:

java -cp libs/simple-json.jar Solution

这样,Java运行时将在jar中找到JSON类,一切都应该正常工作。

如果在类路径中需要更多JAR,可以使用Mac/Linux上的:或 在Windows上。

例如:

java -cp libs/simple-json.jar:libs/other-lib.jar Solution

有关其工作原理的详细信息,请参阅此答案。

 类似资料:
  • 这是我的申请 数据源:类型:com.zaxxer.hikari.HikariDataSource主要: 这是我的入门: 这是我的例外: 2017-11-21 10:10:33.126线程“main”中的表现:java.lang.运行时异常: java.lang.ClassCastException: 无法将 com.mysql.cj.jdbc.Driver to javax.sql.DataSou

  • 问题内容: 我正在从我的一个类中执行Java二进制文件,并且抛出ClassNotFoundException: Geoline类位于/home/geo/Geoline.java。关键是,无论我位于文件系统中的哪个位置,如果我手动执行相同的命令,都将执行该类。使用Runtime.getRuntime()。exec执行二进制文件时,为什么不会发生相同的事情? 编辑:这是在verbose标记上生成的输出

  • 问题内容: 这是我的XML文件: 我做了两个类来解析它(Fields.java和Field.java): 和 但是我得到这个例外。 我不明白为什么会出现这种异常。异常在这里: 我使用的是JDK 1.6_0.0.7。谢谢。 问题答案: 例外是由于您的JAXB(JSR-222)实现认为存在两个名称相同的事物(一个字段和一个属性)。您的用例有两个选项: 选项#1-使用以下注释字段 如果要注释该字段,则应

  • 我的代码出现错误: 我的示例的完整代码如下:

  • 问题内容: 我正在使用iReport构建jaspersoft报告,并且正在使用Fishbowl作为我的DBMS。 我建立了表,并在iReport中显示了我的表是关系型的,但是由于某种原因,它使我出错并且无法运行。它应该非常简单。我要输入邮政编码,日期范围或州名,并输出productName,已实现的总数量,邮政编码和州名的缩写。 当我确实将报告上载到Fishbowl时,它可以运行,但最终崩溃并显示

  • 问题内容: final Multimap terms = getTerms(bq); for (Term t : terms.keySet()) { Collection C = new HashSet(terms.get(t)); if (!C.isEmpty()) { for (Iterator it = C.iterator(); it.hasNext();) { BooleanClause