簡體   English   中英

使用Jackson將JSON映射到POJO

[英]Map JSON to POJO Using Jackson

我正在嘗試使用傑克遜將JSON映射到POJO,並且不斷收到以下錯誤:

> Can not deserialize instance of java.lang.String out of START_OBJECT token\n at [Source: (String)\"{\"checkstyle\

嘗試解析的JSON Im如下:

{
  "checkstyle": {
    "file": [
      {
        "name": "src\\main\\java\\com\\report\\uploader\\controller\\RandomController.java",
        "error": [
          {
            "severity": "error",
            "line": 0,
            "source": "com.puppycrawl.tools.checkstyle.checks.javadoc.JavadocPackageCheck",
            "message": "Missing package-info.java file."
          }
        ]
      }
    ],
    "version": 6.18
  }
}

為此,我創建以下類:

public class Checkstyle {

    @JsonProperty("checkstyle")
    private Linter linterName;
}

public class Linter {

    @JsonProperty("file")
    private List<File> files;

    @JsonProperty("version")
    private String version;
}

public class File {

    @JsonProperty("name")
    private String name;

    @JsonProperty("error")
    private List<Error> errores;

}

public class Error {

    @JsonProperty("severity")
    private String severity;

    @JsonProperty("line")
    private int line;

    @JsonProperty("source")
    private String source;

    @JsonProperty("message")
    private String message;
}

但是,當我運行代碼時,出現了上面提到的錯誤。 我獲得此JSON的方法是使用org.json依賴項將XML文件轉換為JSONObject,然后將JSONobject轉換為String。

然后我進行轉換,然后嘗試通過以下方式將String轉換為POJO:

ObjectMapper mapper = new ObjectMapper();
Checkstyle checkstyle = mapper.readValue(object.toString(), Checkstyle.class);

如果有人能指出我在做什么錯,我將不勝感激。

這是在您的程序mapper.readValue(object.toString(), Checkstyle.class)引起錯誤的行。 您已經將json讀入一個匿名object ,然后使用ObjectMapper中的toString()表示形式映射到Checkstyle類,該類將永遠無法工作。 由於您已經將json字符串丟失到java對象的默認toString表示形式中: someObjectClassname@hashcodenumber

下面是一些常用的readValue方法簽名來進行正確的反序列化:

readValue(InputStream in,類c)
readValue(Reader rd,Class c)
readValue(String json,Class c)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM