gpt4 book ai didi

java - 如何在映射到 Java 对象时忽略少量 JSON 元素

转载 作者:行者123 更新时间:2023-12-02 10:17:39 25 4
gpt4 key购买 nike

我的 Spring Boot 服务处理这样的 JSON

"Books":[
{
"Title": "Title1",
"Author": "Author1"
},
{
"Title": "Title2",
"Author": "Author2"
},
{
"Title": "IGNORE",
"Author": "IGNORE"
}
]

我有一本 Book.java

public class Book{
@JsonProperty("Title")
private String title;
@JsonProperty("Author")
private String author;

public setters & Getters
....
}

这些书籍映射到 MyFavBooks.java

public class MyFavBooks{
@JsonProperty("Books")
private Book[] books;
....
}

我试图不映射以下元素(基于标题)。有什么办法可以做到这一点吗?

{
"Title": "IGNORE",
"Author": "IGNORE"
}

最佳答案

您可以使用@JsonSerialize尝试自定义序列化器。像这样的事情:

public class Book{
@JsonProperty("Title")
@JsonSerialize(using = IgnoreSerializer.class)
private String title;

@JsonProperty("Author")
@JsonSerialize(using = IgnoreSerializer.class)
private String author;

public setters & Getters
....
}
public class IgnoreSerializer extends JsonSerializer<String> {

@Override
public void serialize(String s,
JsonGenerator jsonGenerator,
SerializerProvider serializerProvider)
throws IOException, JsonProcessingException {
if(!s.equals("IGNORE")) {
jsonGenerator.writeObject(s);
}
}
}

或者,如果您需要根据 Title 值跳过整个项目,请在 Book 类上使用相同的 @JsonSerialize 定义自定义序列化程序。

@JsonSerialize(using = IgnoreByTitleSerializer.class)
public class Book{ ... }

class IgnoreByTitleSerializer extends StdSerializer<Book> {
...
@Override
public void serialize(
Book book, JsonGenerator jgen, SerializerProvider provider)
throws IOException, JsonProcessingException {
if(!book.getTitle().equals("IGNORE") {
...
}
}
}

参见https://www.baeldung.com/jackson-custom-serialization例如。

更新
正如 Dmitry Bogdanovich 公平提到的,问题涉及反序列化,所以我相信您可以使用 @JsonDeserialize 采用类似的方式。

关于java - 如何在映射到 Java 对象时忽略少量 JSON 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54562299/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com