如何使用 Jackson 将未包装的 JSON 字段映射到包装对象?
How to map unwrapped JSON field to wrapped object with Jackson?
我有一个JSON的结构
{
"name": "...",
"age": "..."
}
我必须将此 JSON 映射到以下 class 对象
Class Response {
Person person;
}
Class Person {
String name;
String age;
}
是否有任何 Jackson 注释可以帮助我在不更改 JSON 结构或修改 class 结构的情况下执行此操作?
你好,这是一个将 json 绑定到对象中的示例
https://www.tutorialspoint.com/jackson/jackson_data_binding.htm
只需在 Response
class 中的 Person person;
上添加 @JsonUnrapped
注释。顺便说一下,Java 中的 classes 是由 class 定义的,而不是 Class.你的代码不会编译失败吗?如果你还没有添加 getters/setters 到你的 classes 中
响应 class:
public class Response {
@JsonUnwrapped
Person person;
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
}
人 class:
public class Person {
String name;
String age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
这里有一个小的测试代码来验证它:
String json="{\n" +
" \"name\": \"Joe\",\n" +
" \"age\": \"30\"\n" +
"}";
ObjectMapper mapper = new ObjectMapper();
// convert JSON to Response
final Response response = mapper.readValue(json, Response.class);
System.out.println(response.getPerson().getName());
System.out.println(response.getPerson().getAge());
// convert Response to JSON string
final String s = mapper.writeValueAsString(response);
System.out.println(s);
我有一个JSON的结构
{
"name": "...",
"age": "..."
}
我必须将此 JSON 映射到以下 class 对象
Class Response {
Person person;
}
Class Person {
String name;
String age;
}
是否有任何 Jackson 注释可以帮助我在不更改 JSON 结构或修改 class 结构的情况下执行此操作?
你好,这是一个将 json 绑定到对象中的示例 https://www.tutorialspoint.com/jackson/jackson_data_binding.htm
只需在 Response
class 中的 Person person;
上添加 @JsonUnrapped
注释。顺便说一下,Java 中的 classes 是由 class 定义的,而不是 Class.你的代码不会编译失败吗?如果你还没有添加 getters/setters 到你的 classes 中
响应 class:
public class Response {
@JsonUnwrapped
Person person;
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
}
人 class:
public class Person {
String name;
String age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
这里有一个小的测试代码来验证它:
String json="{\n" +
" \"name\": \"Joe\",\n" +
" \"age\": \"30\"\n" +
"}";
ObjectMapper mapper = new ObjectMapper();
// convert JSON to Response
final Response response = mapper.readValue(json, Response.class);
System.out.println(response.getPerson().getName());
System.out.println(response.getPerson().getAge());
// convert Response to JSON string
final String s = mapper.writeValueAsString(response);
System.out.println(s);