【问题标题】:Why does my JSONParser throw NoClassDefFoundError?为什么我的 JSONParser 会抛出 NoClassDefFoundError?
【发布时间】:2022-01-15 10:02:20
【问题描述】:

我正在尝试将扫描仪字符串转换为 Java 中的 JSONObject 并从 Json Simple 导入 JSON 模块。我已经将 JSON-simple-1.1.1.jar 添加到我的构建路径中。但是,当我试图解析我的内联字符串时。 我的内联字符串如下所示:{"events":[{"url":"/manipulate-cloudy-country","visitorId":"03c0b5e0-3eeb-382a-8c6d-35e4bb189cf6","timestamp": 1515042087205},...{ "url":"/race-lazy-control", "visitorId":"0832d11b-017a-388a-8a9e-77e5a1f6f9f4", “时间戳”:1515042342655 }]} 应该是我尝试转换成 JSONObject 的一堆数据。

编译器显示: 线程“main”中的异常 java.lang.NoClassDefFoundError: org/json/simple/JSONObject 在 Solution.main(Solution.java:45) 引起:java.lang.ClassNotFoundException:org.json.simple.JSONObject 在 java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:602) 在 java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) 在 java.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();
        } ```

【问题讨论】:

  • 确保你的 org.json 依赖被编译到最终的 jar 中

标签: java json json-simple


【解决方案1】:

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

您发布的代码表明您正在导入像 org.json.simple.JSONObject 这样不属于 Java 标准库的类,因此您需要将它们提供给 Java 运行时,通常通过包含 jar,基本上是一个包含类文件(.class 文件,.java 文件的编译版本)的 zip 文件,放入所谓的 classpath,这是 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

有关其工作原理的详细信息,请参阅this answer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-10
    • 1970-01-01
    • 2014-10-09
    • 1970-01-01
    相关资源
    最近更新 更多