gpt4 book ai didi

Java - 使用 fastXML 和 Jackson 进行反序列化注释

转载 作者:行者123 更新时间:2023-12-02 02:12:19 24 4
gpt4 key购买 nike

这是一个工作代码的简单示例,用于在构造函数中使用 fastXML/Jackson 反序列化字符串列表:

private List<String> xyz;

@JsonCreator
public FooBar(@JsonProperty("blargs") List<String> xyz)
{
this.xyz = xyz
}

所以,上面的代码工作正常,这是我对如何使用 Jackson 反序列化 json 字符串的理解,如下所示: {"blargs":["one","two","third"]}

所以,这是我的问题:

我的输入 json 现在看起来像这样:

{"blargs":[
{"fooId":888,"barVal":"tacos"},
{"fooId":222,"barVal":"hamburgers"},
{"fooId":444,"barVal":"underpants"}
]
}

...但我不知道如何注释构造函数以将传入的 json 反序列化到我的映射中,其中 fooId 和 barVal 成为键/值对。

这是我迄今为止正在处理的内容

private Map<Integer, String> xyz;

@JsonCreator
public FooBar(@JsonProperty("blargs") ????? Map<Integer, String> xyz)
{
this.xyz = xyz
}

注意:我这样调用上面显示的构造函数:

ObjectMapper mapper = new ObjectMapper();
FooBar fooBar = mapper.readValue(jsonValue, FooBar.class);

最佳答案

您可以编写自定义反序列化器:

public static class XyzDeserializer extends JsonDeserializer<Map<Integer, String>> {

@Override
public Map<Integer, String> deserialize(JsonParser p,
DeserializationContext ctxt) throws IOException {
JsonNode rootNode = p.getCodec().readTree(p);
Map<Integer, String> map = new HashMap<>();
rootNode.forEach(n -> map.put(
n.get("fooId").intValue(),
n.get("barVal").asText()
));
return map;
}
}

并以这种方式使用它:

@JsonCreator
public FooBar(
@JsonProperty("blargs")
@JsonDeserialize(using = XyzDeserializer.class) Map<Integer, String> xyz) {
this.xyz = xyz;
}

关于Java - 使用 fastXML 和 Jackson 进行反序列化注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49824305/

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