我该如何解决"org.json.simple.JSONObject 无法解析"的问题?

14

当我尝试通过Tomcat打开我的JSP时,我收到以下消息:

类型org.json.simple.JSONObject无法解析。它是从必需的.class文件间接引用的。

类型Ejercicio中的方法getJSONObject()引用了缺失的类型JSONObject。

我有一个Java类,像这样:

    package E;
    import org.json.simple.*;
    import javax.json.*;
    import org.json.*;

    public class Ejercicio {
        public int a;
        public String b;

    public Ejercicio (int a, String b) {
        this.a=a;
        this.b=b;
        }

    public JSONObject getJSONObject() {
        JSONObject obj = new JSONObject();
        obj.put("a", a);
        obj.put("b", b);
        return obj;
        }
    }

我的JSP如下:

    <%@page import="java.io.*" %>
    <%@page import="java.util.*"%>
    <%@page import="E.Ejercicio"%>
    <%@page import="javax.json.*"%>
    <%@page import="org.json.simple.*"%>
    <%@page import="org.json.*"%>
    <%@page import="net.sf.json.*" %>

    <%  
    ArrayList<Ejercicio> miArray = new ArrayList<Ejercicio>();
    miArray.add(new Ejercicio (1,"Hola"));
    miArray.add(new Ejercicio (2,"Caracola"));
    miArray.add(new Ejercicio (3,"Perola"));
    for (Ejercicio temp:miArray) {
        out.println("<p>"+temp.b+"</p>");
        }

    JSONArray jsonArray = new JSONArray();
    for (int i=0; i < miArray.size(); i++) {
        jsonArray.put(miArray.get(i).getJSONObject());
        }
    %>

我已经将许多文件夹添加到WEB-INF内的lib文件夹和Tomcat lib中,尝试解决问题,但没有结果(commons-beanutils-1.8.1、commons-collections-3.2.1、commons-lang-2.5、commons-logging-1.1.1、ezmorph-1.0.6、java-json、javax.json-1.0、json-lib-2.4-jdk15、json-rpc-1.0、json-simple-1.1.1-sources、org.json)。

当我编译Java类时,出现了“某些输入文件使用了未经检查或不安全的操作”的消息。这可能与jps没有编译有关吗?

8个回答

21

您的类路径中缺少 json-simple-1.1.1.jar

如果您使用 Maven,请将以下内容添加到您的 pom.xml 文件中。

<dependency>
    <groupId>com.googlecode.json-simple</groupId>
    <artifactId>json-simple</artifactId>
    <version>1.1.1</version>
</dependency>

或者您可以从此处下载。


当你说“从你的类路径(classpath)中”时,你指的是什么?我已经在我的项目库(lib)中添加了json-simple-1.1.1并再次使用以下语句编译了类:javac -cp .;"C:\Program Files\apache-tomcat-8.5.13\webapps\Heroismo\WEB-INF\lib\*" Ejercicio.java,但是当尝试打开jsp文件时仍然遇到相同的错误。我不懂Maven。 - Erik Escriche

12

首先,在您的项目中不需要 json-simple.jar。因此请删除 import org.json.simple.*

其次,最佳实践是仅从您的jar中导入所需的类。 因此,您可以将import org.json.*;替换为

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.json.JSONString;

5

对我来说,只需要下载jar包并将其添加到eclipse即可。

按照以下步骤操作: 1. 在此链接https://jar-download.com/artifacts/org.json下载.jar文件。 2. 定位并提取json.jar文件。

在eclipse中: -右键单击您的项目并转到构建路径 -添加外部jar -点击应用

就是这样enter image description here;希望对大家有所帮助。


1
此外:有时库在“顺序和导出”选项卡中被禁用,因此即使已添加,项目也无法使用它们。 - G_V

2

我面临着同样的问题。我尝试将JAR文件添加到类路径中,但对我没有用。如果您正在使用Java Gradle项目,那么可以尝试将以下行添加到build.gradle

implementation group: 'org.json', name: 'json', version: '20220320'
    
implementation group: 'com.googlecode.json-simple', name: 'json-simple', version: '1.1.1'

如果你正在使用Maven,将以下内容添加到你的pom.xml文件中:
<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20220320</version>
</dependency>
<dependency>
    <groupId>com.googlecode.json-simple</groupId>
    <artifactId>json-simple</artifactId>
    <version>1.1.1</version>
</dependency>

1

你的项目库中是否有 json-simple.jar 的某个版本?


是的,确实是这样。在阅读您的评论之前,我只有一个名为json-simple-1.1.1-sources的jar文件。现在我已经添加了json-simple-1.1.1,但是当尝试打开jsp时仍然出现相同的错误。 - Erik Escriche

1
你可以下载所需的jar包,对我而言有效的是下载缺失的json20140107 jar并添加以下导入语句: import org.json.JSONException; import org.json.simple.JSONObject;

0
这与org.json包兼容:
从这里复制源文件。

https://github.com/stleary/JSON-java

注意:这是源代码链接(JSON-java),取自http://www.json.org/

放入 \src\org\json 文件夹中

Eclipse中,点击打开透视图按钮,然后选择资源。 enter image description here

右键单击 org.json,然后点击刷新以将 Java 源代码添加到项目中。


0

我在任何地方都没有看到正确的答案,但我的TomCat JSON库问题出在构件部署上。如果您正在使用IntelliJ,请转到项目结构>>构件,并将jar添加到lib文件夹中

查看我的项目结构

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接