gpt4 book ai didi

Java 对象使用 Jackson 将列表扩展为 Json

转载 作者:太空宇宙 更新时间:2023-11-04 06:30:59 25 4
gpt4 key购买 nike

我想使用 Jackson 将一个将列表扩展为 Json 的对象转换。示例:

public class TryToSerialize extends ArrayList<String>
{
private int number;
private String word;

public TryToSerialize(){
number = 0;
word = "";
}

@JsonProperty
public int getNumber() {
return number;
}

public void setNumber(int number) {
this.number = number;
}
@JsonProperty
public String getWord() {
return word;
}

public void setWord(String word) {
this.word = word;
}

@JsonIgnore
public String getAsJSON() throws IOException {
ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(new File("c:\\tts.json"), this);
return mapper.writeValueAsString(this) ;
}
}

当我序列化它时,我只会得到数组部分。

    TryToSerialize tts = new TryToSerialize();
tts.setNumber(10);
tts.setWord("Working");
tts.add("first");
tts.add("second");
tts.add("third");
String json = tts.getAsJSON();

Json:

["first","second","third"]

我正在寻找一种方法来包含对象的其他变量。

最佳答案

当您的对象扩展存在默认序列化行为的类之一时,您的额外字段将被忽略。

现在,我不清楚的一件事是预期结果应该是什么。

如果您期望的结果如下:

{"number":10,"word":"Working","values":["first","second","third"]}

那么您应该能够通过自定义序列化器来做到这一点,如下所示:

public class MySerializer extends JsonSerializer<TryToSerialize> {
@Override
public void serialize(TryToSerialize toSerialize, JsonGenerator jgen, SerializerProvider provider)
throws IOException, JsonProcessingException {
jgen.writeStartObject();
jgen.writeNumberField("number", toSerialize.getNumber());
jgen.writeStringField("word", toSerialize.getWord());
provider.defaultSerializeField("values", toSerialize.iterator(), jgen);
jgen.writeEndObject();
}
}

如果您期望的结果如下:

[10,"Working","first","second","third"]

然后,序列化器将如下所示:

public class MySerializer extends JsonSerializer<TryToSerialize> {
@Override
public void serialize(TryToSerialize toSerialize, JsonGenerator jgen, SerializerProvider provider)
throws IOException, JsonProcessingException {
jgen.writeStartArray();
jgen.writeNumber(toSerialize.getNumber());
jgen.writeString(toSerialize.getWord());
for (Iterator<String> iterator = toSerialize.iterator(); iterator.hasNext();) {
jgen.writeString((String) iterator.next());
}
jgen.writeEndArray();
}
}

然后,在这两种情况下都用以下方式注释您的类:

@JsonSerialize(using = MySerializer.class)

可能有更聪明的方法,但这应该有效......

关于Java 对象使用 Jackson 将列表扩展为 Json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26121594/

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