【问题标题】:Cannot parse a simple empty JSON array with Jackson无法使用 Jackson 解析简单的空 JSON 数组
【发布时间】:2021-10-23 04:22:14
【问题描述】:

我正在尝试在一个非常简单的自定义布局 java 项目中使用 Jackson 包:

├── main.java
└── pom.xml

这是两个文件的内容:

main.java

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

class Main {
  static String tags = "[]";
  public static void main(String[] args) {
    ObjectMapper mapper = new ObjectMapper();
    JsonNode root;
    root = mapper.readTree(tags);
  }
}

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
 
  <groupId>my-group</groupId>
  <artifactId>my-app</artifactId>
  <version>1.0-SNAPSHOT</version>
 
  <name>my-app</name>
  <dependencies>

    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.13.0</version>
    </dependency>
  </dependencies>

  <properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>
  
  <build>
    <sourceDirectory>${project.basedir}</sourceDirectory>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>3.3.0</version>
        <configuration>
          <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
          </descriptorRefs>
          <archive>
            <manifest>
              <addClasspath>true</addClasspath>
              <classpathPrefix>lib/</classpathPrefix>
              <mainClass>Main</mainClass>
            </manifest>
          </archive>
        </configuration>
        <executions>
          <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
              <goal>single</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>

现在,当我运行 mvn package 时,它给了我这个错误:

... main.java:[9,27] unreported exception com.fasterxml.jackson.core.JsonProcessingException; must be caught or declared to be thrown

当我第一次遇到这个错误时,我有一个更大的 JSON 字符串要测试,然后我怀疑问题可能是解析问题,所以我通过将其替换为一个简单的空数组 [] 来简化事情,如图所示代码,没有运气。

我该如何解决这个错误?

【问题讨论】:

  • 你用过eclipse之类的编辑器吗?因为 readTree 方法会抛出 IOException 和 JsonProcessingException。它应该通过 try/catch 或 throws 在您的 main 方法中处理。使用编辑器工具,它会显示为您发出错误/警告。
  • @huy 我使用 VSCode 和终端,我尝试将它们包含在 try ... catch 中,但是仅仅抑制没有明显好处的错误并不能解决主要问题。
  • 我只是从你包含的代码中猜测,它会抛出编译错误,你应该包含更新和完整的堆栈跟踪错误。然后其他人可以更轻松地了解您的问题。
  • 旧错误是“必须被捕获或声明被抛出”...相对于我之前的命令,您还没有包含新的堆栈跟踪...
  • 就我而言,我工作得很好。我附上了try..catch。我认为你最好修改你的代码和错误的细节。

标签: java json maven jackson


【解决方案1】:
public JsonNode readTree(String content)
                  throws IOException,
                         JsonProcessingException

您应该在 main 方法中使用 try/catch 或 throws 处理异常。

【讨论】:

    【解决方案2】:

    感谢@huy 的评论,该消息具有足够的描述性,只是将解析函数包含在try ... catch 子句中。

    更新后的代码是:

    main.java

    import com.fasterxml.jackson.databind.JsonNode;
    import com.fasterxml.jackson.databind.ObjectMapper;
    import com.fasterxml.jackson.core.JsonProcessingException;
    
    class Main {
      static String tags = "[]";
      public static void main(String[] args) {
        ObjectMapper mapper = new ObjectMapper();
        JsonNode root;
        try {
          root = mapper.readTree(tags);
          System.out.println(root.toString());
        } catch (JsonProcessingException e) {}
      }
    }
    

    【讨论】:

    • 如果有人有同样的问题,请帮助接受我的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-14
    • 1970-01-01
    • 2015-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多