作为我的应用程序的输入,我可能会得到一个JsonObject或它们的列表:
input1 = [ { "prop": "val1" }, { "prop": "val2" } ]
input2 = { "prop": "val" }
我可以使用JsonNode
作为两个输入的目标类型
objectMapper.readValue(input1, JsonNode.class);
objectMapper.readValue(input2, JsonNode.class);
然后评估根节点是阵列节点还是对象节点。
我寻求一种方法来定义我的自定义目标类型,例如List
objectMapper.readValue(input, new TypeRef<ArrayList<MyObject>>() {});
但是,对于单个对象失败-它无法从{构造数组类型。
我试图创建自己的类型:
public class MyList extends ArrayList<MyObject> {
public String prop;
@JsonCreator
public MyList(String prop) {
super();
this.prop = prop; // Resp add(new MyObject(prop));
}
public MyList() {}
}
但Jackson拒绝将JsonCreator用于单个对象。
有没有办法,我可以做到这一点(理想情况下没有自定义序列化器,除非那个可以变得非常通用)
当然,Jackson有一个简单的解决方案:反序列化功能。接受\u SINGLE\u VALUE\u AS\u ARRAY的帮助!
@EqualsAndHashCode
public class Example {
@JsonProperty public String name
}
@Test
public void experiment() {
ObjectMapper om = new ObjectMapper();
om.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
String list= "[{ \"name\": \"peter\" }]";
String single= "{ \"name\": \"peter\" }";
List<Example> respList = om.readValue(list, new TypeReference<List<Example>>() {});
List<Example> respSingle = om.readValue(single, new TypeReference<List<Example>>() {});
Assert.assertEquals(respList, respSingle)
}
我有一个抽象的超类A,我有几个具体的子类B,C,D 在序列化方面,我执行以下操作: 没问题。我现在想反序列化这个。我知道我不能实例化一个抽象类,那么这是如何实现的呢? 这不起作用: 编辑:我把这个添加到我的抽象超类中:(仍然没有运气) 再次编辑:我现在遇到以下错误: 看看JSON,@class不在那里。我怎样才能做到?我试过: 但这并没有奏效。有这方面的例子吗?如何告诉对象映射器对类使用我的注释?
我试图通过Kotlin使用Jackson对lastfm api提供的xml进行反序列化。我用JAXB在Java中实现了这一点,我正在尝试移植它。除以下示例中的“未包装列表”字段外,所有功能都正常工作。我知道Track数据类正在工作,因为如果我使用而不是
我有以下JSON文件要反序列化
我有一个JSON字符串,它将空列表标记为而不是。因此,例如,如果我有一个没有子对象的对象,我将收到这样的字符串: 我想将其反序列化为父类,将子类正确设置为子类的空列表。 对于上面的JSON字符串,我想要一个将其id设置为13的对象,并将子元素设置为新的ArrayList 我知道如何为整个类使用注释 然后呢 但是,我想解决从字符串正确实例化列表的一般问题: 我能得到这样的东西吗?
问题内容: 使用Spring Boot和Jackson,如何将包装/内部列表反序列化为直接在外部级别的列表? 例如,我有: 在JSON中,是; 下的列表。但我想将其解析为直接位于下方的名为列表的列表,而不是定义包含名为的列表的DTO 。 这可能吗?如何定义此DTO ? 问题答案: 看来这就是我所需要的。 https://www.baeldung.com/jackson- annotations @
假设我有一个DTO类,如下所示: 现在我有一个返回MyDTO对象列表的API。但我想根据一些标准从这个对象列表中过滤掉并获取单个对象MyDTO。(比如属性1==一些值)。 我知道,在获得对象列表后,我可以使用流来实现这一点。但杰克逊有什么办法吗?因此,在我的fiegn客户端调用中,我可以将单个对象作为返回类型。 提前感谢!