Отобразите JSON в POJO, используя Джексона - PullRequest
0 голосов
/ 30 июня 2018

Я пытаюсь сопоставить JSON с POJO, используя Джексона, и постоянно получаю следующую ошибку:

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

JSON, который я пытаюсь проанализировать, выглядит следующим образом:

{
  "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 путем преобразования XML-файла в JSONObject с использованием зависимости org.json, а затем JSONobject, который я преобразую в строку.

Затем я конвертирую, затем пытаюсь конвертировать строку в мой POJO следующим образом:

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

Если бы кто-нибудь мог указать мне, что я делаю неправильно, я был бы признателен.

1 Ответ

0 голосов
/ 30 июня 2018

Эта строка вызывает ошибку в вашей программе mapper.readValue(object.toString(), Checkstyle.class). Вы уже прочитали json в анонимный object, а затем использовали его toString() представление в ObjectMapper для сопоставления с Checkstyle классом, который никогда не будет работать. Поскольку вы уже потеряли строку json в представлении java по умолчанию toString объекта: someObjectClassname@hashcodenumber.

Ниже приведены некоторые из наиболее часто используемых сигнатур readValue метода для исправления десериализации:

readValue (InputStream in, класс c)
readValue (Reader rd, Class c)
readValue (строка json, класс c)

...