作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个要用于反序列化 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/
出于好奇,我尝试了一些原型(prototype)制作,但似乎只允许在第一个位置使用子例程的原型(prototype) &。 当我写作时 sub test (&$$) { do_somethin
我需要开发一个类似于 Android Play 商店应用程序或类似 this app 的应用程序.我阅读了很多教程,发现几乎每个教程都有与 this one 类似的例子。 . 我已经开始使用我的应用程
考虑一个表示“事件之间的时间”的列: (5, 40, 3, 6, 0, 9, 0, 4, 5, 18, 2, 4, 3, 2) 我想将这些分组到 30 个桶中,但桶会重置。期望的结果: (0, 1,
我是一名优秀的程序员,十分优秀!