使用 Jackson 将 JSON 映射到 POJO
Map JSON to POJO Using Jackson
我正在尝试使用 jackson 将 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 的方法是使用 org.json
依赖项将 XML 文件转换为 JSON 对象,然后将 JSON 对象转换为字符串.
然后我进行转换,然后尝试通过以下方式将字符串转换为我的 POJO:
ObjectMapper mapper = new ObjectMapper();
Checkstyle checkstyle = mapper.readValue(object.toString(), Checkstyle.class);
如果有人能指出我做错了什么,我将不胜感激。
这是在您的程序中导致错误的行 mapper.readValue(object.toString(), Checkstyle.class)
。您已经将 json 读入匿名 object
,然后使用其在 ObjectMapper 中的 toString()
表示映射到 Checkstyle
class,这将永远不起作用。由于您已经将 json 字符串丢失为 java 对象的默认 toString 表示形式:someObjectClassname@hashcodenumber
.
下面是readValue
方法的一些常用签名来做正确的反序列化:
readValue(InputStream in, Class c)
readValue(Reader rd, Class c)
readValue(String json, Class c)
我正在尝试使用 jackson 将 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 的方法是使用 org.json
依赖项将 XML 文件转换为 JSON 对象,然后将 JSON 对象转换为字符串.
然后我进行转换,然后尝试通过以下方式将字符串转换为我的 POJO:
ObjectMapper mapper = new ObjectMapper();
Checkstyle checkstyle = mapper.readValue(object.toString(), Checkstyle.class);
如果有人能指出我做错了什么,我将不胜感激。
这是在您的程序中导致错误的行 mapper.readValue(object.toString(), Checkstyle.class)
。您已经将 json 读入匿名 object
,然后使用其在 ObjectMapper 中的 toString()
表示映射到 Checkstyle
class,这将永远不起作用。由于您已经将 json 字符串丢失为 java 对象的默认 toString 表示形式:someObjectClassname@hashcodenumber
.
下面是readValue
方法的一些常用签名来做正确的反序列化:
readValue(InputStream in, Class c)
readValue(Reader rd, Class c)
readValue(String json, Class c)