如何在JSON中使用杰克逊更改字段名

我使用jackson将我的对象转换为json。 该节点有两个字段:

@Entity
public class City {
@id
Long id;
String name;
public String getName() { return name; }
public void setName(String name){ this.name = name; }
public Long getId() { return id; }
public void setName(Long id){ this.id = id; }
}

因为我想使用jQuery自动完成功能,我想“id”显示为json中的“值”和“名称”显示为“标签”。杰克逊的文档不清楚这一点,我已经尝试了每一个注释,甚至远程似乎它做了我需要的,但我不能让name出现为labelid出现为json中的value

有人知道怎么做吗,或者这是否可能?

265028 次浏览

你试过使用@JsonProperty吗?

@Entity
public class City {
@id
Long id;
String name;


@JsonProperty("label")
public String getName() { return name; }


public void setName(String name){ this.name = name; }


@JsonProperty("value")
public Long getId() { return id; }


public void setId(Long id){ this.id = id; }
}

注意在Jackson 1中有org.codehaus.jackson.annotate.JsonProperty。Jackson 2.x中的com.fasterxml.jackson.annotation.JsonProperty。检查您正在使用哪个ObjectMapper(从哪个版本),并确保使用了正确的注释。

还有一个重命名字段的选项:

杰克逊mixin

如果你处理第三方类,你是无法注释,或者你只是不想用Jackson特定的注释污染类,这很有用。

Mixins的Jackson文档已经过时,所以这个例子可以提供更清晰的说明。本质上:你创建一个mixin类,它以你想要的方式进行序列化。然后将其注册到ObjectMapper:

objectMapper.addMixIn(ThirdParty.class, MyMixIn.class);

杰克逊

如果你正在使用Jackson,那么你可以使用@JsonProperty注释来自定义给定JSON属性的名称。

因此,你只需要用@JsonProperty注释实体字段,并提供一个自定义的JSON属性名,就像这样:

@Entity
public class City {


@Id
@JsonProperty("value")
private Long id;


@JsonProperty("label")
private String name;


//Getters and setters omitted for brevity
}

JavaEE或JakartaEE JSON-B

JSON- b是用于在Java对象与JSON之间进行转换的标准绑定层。如果你正在使用JSON- b,那么你可以通过@JsonbProperty注释覆盖JSON属性名:

@Entity
public class City {


@Id
@JsonbProperty("value")
private Long id;


@JsonbProperty("label")
private String name;


//Getters and setters omitted for brevity
}