如何使用 Jackson 序列化具有树结构的 JSON 文件
How to serialize a JSON file with tree structure with Jackson
我需要将 JSON 文件序列化为 Java 对象。 JSON 文件具有树结构,这意味着位于根的对象具有子对象,这些子对象是其自身的实例,依此类推。例如,考虑以下 JSON 文件:
{
"name": "peter",
"parent": null,
"children": [
{
"name": "simon",
"parent": "peter",
"children": [
{
"name": "john",
"parent": "simon",
"children": []
}
]
},
{
"name": "javier",
"parent": "peter",
"children": []
},
{
"name": "martin",
"parent": "peter",
"children": []
}
]
}
我已经尝试使用 Jackson 库进行序列化。这是我要序列化的对象:
public class Person {
private String name;
private Person parent;
private List<Person> children;
@JsonCreator
public Project(@JsonProperty("name") String name,
@JsonProperty("parent") Person parent,
@JsonProperty("children") List<Person> children) {
this.name = name;
this.coordinates = parent;
this.children = children;
}
// getters, setters, and constructor
}
这是我目前尝试过的方法:
String jsonString = Files.readString(Paths.get("/path_to/file.json"));
List<Person> listModel = objectMapper.readValue(jsonString, new TypeReference<>() {});
但是,它触发了以下MismatchedInputException: Cannot deserialize instance of java.util.ArrayList<Person> out of START_OBJECT token
。
无法从 START_OBJECT 令牌中反序列化 java.util.ArrayList 的实例。
因为您的 json 文件是一个 Person 对象而不是 List 对象
我需要将 JSON 文件序列化为 Java 对象。 JSON 文件具有树结构,这意味着位于根的对象具有子对象,这些子对象是其自身的实例,依此类推。例如,考虑以下 JSON 文件:
{
"name": "peter",
"parent": null,
"children": [
{
"name": "simon",
"parent": "peter",
"children": [
{
"name": "john",
"parent": "simon",
"children": []
}
]
},
{
"name": "javier",
"parent": "peter",
"children": []
},
{
"name": "martin",
"parent": "peter",
"children": []
}
]
}
我已经尝试使用 Jackson 库进行序列化。这是我要序列化的对象:
public class Person {
private String name;
private Person parent;
private List<Person> children;
@JsonCreator
public Project(@JsonProperty("name") String name,
@JsonProperty("parent") Person parent,
@JsonProperty("children") List<Person> children) {
this.name = name;
this.coordinates = parent;
this.children = children;
}
// getters, setters, and constructor
}
这是我目前尝试过的方法:
String jsonString = Files.readString(Paths.get("/path_to/file.json"));
List<Person> listModel = objectMapper.readValue(jsonString, new TypeReference<>() {});
但是,它触发了以下MismatchedInputException: Cannot deserialize instance of java.util.ArrayList<Person> out of START_OBJECT token
。
无法从 START_OBJECT 令牌中反序列化 java.util.ArrayList 的实例。 因为您的 json 文件是一个 Person 对象而不是 List 对象