当前位置: 首页 > 面试题库 >

将JSON反序列化为ArrayList 使用杰克逊

劳夕
2023-03-14
问题内容

我有一个Java类MyPojo,我对从JSON反序列化感兴趣。我已经配置了一个特殊的MixIn类MyPojoDeMixIn,以帮助我进行反序列化。MyPojo只有intString实例变量与适当的getter和setter方法相结合。MyPojoDeMixIn看起来像这样:

html" target="_blank">public abstract class MyPojoDeMixIn {
  MyPojoDeMixIn(
      @JsonProperty("JsonName1") int prop1,
      @JsonProperty("JsonName2") int prop2,
      @JsonProperty("JsonName3") String prop3) {}
}

在我的测试客户端中,我执行以下操作,但是在编译时它当然不起作用,因为JsonMappingException与类型不匹配有关。

ObjectMapper m = new ObjectMapper();
m.getDeserializationConfig().addMixInAnnotations(MyPojo.class,MyPojoDeMixIn.class);
try { ArrayList<MyPojo> arrayOfPojo = m.readValue(response, MyPojo.class); }
catch (Exception e) { System.out.println(e) }

我知道我可以通过创建一个仅包含一个“响应”对象的方法来缓解此问题ArrayList<MyPojo>,但是随后我将不得不为我想返回的每种类型创建这些有点无用的对象。

我也在线查看了JacksonInFiveMinutes,但是却很难理解这些问题Map<A,B>及其与我的问题的关系。如果您无法确定,我是Java的新手,并且来自Obj-
C背景。他们特别提到:

除了绑定到POJO和“简单”类型外,还有另一种变体:绑定到通用(类型化)容器。这种情况由于所谓的类型擦除(Java用来以某种向后兼容的方式实现泛型)而需要特殊的处理,这使您无法使用Collection.class之类的东西(不会编译)。

因此,如果要将数据绑定到地图中,则需要使用:

Map<String,User> result = mapper.readValue(src, new TypeReference<Map<String,User>>() { });

我如何直接反序列化到ArrayList


问题答案:

您可以使用TypeReference包装器直接反序列化为列表。示例方法:

public static <T> T fromJSON(final TypeReference<T> type,
      final String jsonPacket) {
   T data = null;

   try {
      data = new ObjectMapper().readValue(jsonPacket, type);
   } catch (Exception e) {
      // Handle the problem
   }
   return data;
}

并且用于:

final String json = "";
Set<POJO> properties = fromJSON(new TypeReference<Set<POJO>>() {}, json);

TypeReference Javadoc



 类似资料:
  • 我正在调用一个返回JSON的endpoint,它看起来像这样(在Postman中): 此请求返回的Content-Type头是(与通常的 类来自外部库(编写这个endpoint的人)。无论如何,当我试图通过< code > rest template . exchange()调用这个endpoint时,Jackson都无法将这个JSON反序列化为一个有效的< code>Result类。我正在这样做

  • 问题内容: 我有一个这样的模型: 例如,我从远程获取以下JSON: 当我反序列化此JSON时,and 变量将获得正确的值。但是,我不想解释变量的内容。相反,我希望它是以下字符串: 之后,我将自己解释。我如何获得这个值? 问题答案: Jackson问题596是为原始问题中描述的所需功能而创建的。如果要实施,请投票。 当前可用的解决方案是实现自定义反序列化处理。

  • 问题内容: 我有一个JSON字符串,将标记为而不是。因此,例如,如果我有一个没有子对象的对象,我将收到类似以下的字符串: 我想将其反序列化为Parent类,并将子级正确设置为一个空的子级列表。 对于上述JSON字符串,我想要一个对象,其设置为,而设置为。 我会知道如何在整个课堂上使用注释 然后 但是,我想解决一个从字符串正确实例化List的一般问题: 我能得到类似的东西吗? 问题答案: 几个选择;

  • 问题内容: 我正在为我的REST Web服务使用jackson(球衣和码头)-一切进展顺利。但是我要求在JSON post请求中的名称/值对之一中包含特殊字符。即json请求(在帖子正文中)- //“ print-color”中的“-”出现问题。 现在,在该对象类的相应Java bean中,我无法创建一个名称为print-color的属性(因为不允许使用“-”)。如何处理映射? 谢谢。 问题答案:

  • 问题内容: 我有一个这样的模型: 例如,我从远程获取以下JSON: 当我反序列化此JSON时,and 变量将获得正确的值。但是我不想解释我变量的内容。相反,我希望它是以下字符串: 之后,我将自己解释。我如何获得的价值? 问题答案: Jackson问题596是为原始问题中描述的所需功能而创建的。如果要实施它,请投票。 当前可用的解决方案是实现自定义反序列化处理。 另外,如何使用Jackson将原始J

  • 有没有办法让Jackson序列化某个流对象(并在之后关闭)?这样地: 使现代化 澄清:我想流式传输内容,而不仅仅是将其序列化到单个String对象。