gpt4 book ai didi

java - 使用 Jackson 将不同类型反序列化为单个字段

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

我有一个要用于反序列化 JSON 的类

public interface MyObject {

@JsonProperty("prop")
String prop;

@JsonProperty("value")
Double value(); // Need this to be either a double or a string or a Map
}

但是,我希望能够解析两个具有 double 值的 JSON

{
prop: "myprop",
value: 15.7
}

和一个非 Double 值的 JSON,如字符串或映射

{
prop: "myprop1",
value: {
"attr1": "value1",
"attr2": 12.0
}
}

我查看了 @JsonSubTypes 注释,但它看起来只对涉及继承的情况有用。有可能在 jackson 做到吗?如果是这样,我如何定义我的 Java 类来实现相同的目的?

最佳答案

一般来说,我不鼓励使用任意类型的数据点。拥有强类型会带来很多好处,如果你愿意的话,我可以谈谈。但是,由于您只谈到了反序列化,因此您可能只是在阅读其他人生成的此类 JSON。

解决方案非常简单:使用对象字段。

public static class MyObject {

@JsonProperty("prop")
String prop;

@JsonProperty("value")
Object value; // <- object
}

@Test
public void testUnknownType() throws JsonProcessingException {
final ObjectMapper objectMapper = new ObjectMapper();
final MyObject object1 = objectMapper.readValue("{\n" +
" \"prop\": \"myprop\",\n" +
" \"value\": 15.7\n" +
"}", MyObject.class);
Assert.assertEquals(15.7d, object1.value);
final MyObject object2 = objectMapper.readValue("{\n" +
" \"prop\": \"myprop1\",\n" +
" \"value\": {\n" +
" \"attr1\": \"value1\",\n" +
" \"attr2\": 12.0\n" +
" }\n" +
"}", MyObject.class);
Assert.assertTrue(object2.value instanceof Map);
}

关于java - 使用 Jackson 将不同类型反序列化为单个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64048165/

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