使用jackson反序列化json,将字段映射到包装类



我有一个JSON,看起来像这个

{
Name: "Jhon",
Age: 28,
Children:[{..},{..}]
}

我创建了两个实体Person和Children,以及一个包装器Payload

class Payload{
Person A;
Children x[];
}

我想做一些类似的事情

Payload payload = mapper.readValue(request, Payload.class);

字段映射不正确,因为名称和年龄字段位于根位置。像下面这样的JSON在这种情况下会起作用,但我不能更改JSON,也不能将名称和年龄字段放在Payload中。我发现了@JsonRootName注释,但不确定它是如何工作的,或者会不会工作。

{
Person: { Name: "Jhon", Age:28},
Children: [{..},{..}]
}

您可以使用Json To Java类。

// import com.fasterxml.jackson.databind.ObjectMapper; // version 2.11.1
// import com.fasterxml.jackson.annotation.JsonProperty; // version 2.11.1
/* ObjectMapper om = new ObjectMapper();
Payload payload = om.readValue(myJsonString), Payload.class); */
public class Payload {
@JsonProperty("Name") 
public String name;
@JsonProperty("Age") 
public int age;
@JsonProperty("Children") 
public List<Children> children;
}

要在jsonc代码中使nameage处于顶级,您可能需要尝试将属性置于Payload类的顶级:

class Payload{
String name;
int age;
Children x[];
}

如果这有帮助,请告诉我。

最新更新