当前位置: 首页 > 知识库问答 >
问题:

反序列化组织。springframework。数据util。从json配对

全鸿晖
2023-03-14

我应该能够对组织进行序列化/反序列化。springframework。数据util。将配对到JSON/从JSON配对。

我有列表

序列化没有问题;但是,由于这个是不可变的,因此没有默认构造函数并且反序列化失败。
我知道有@JsonCreator;但如果我是corretly,我们可以将其仅放置在构造函数上。由于类是最终的,因此我不能使用带有@JsonCreator注释的自己的默认构造函数来扩展它。
有人能指出我吗,无论如何我如何才能实现我的目标?我想避免创建自己的包装类。


共有2个答案

丌官炎彬
2023-03-14

Markusw的答案是正确的。为了展示一个真实的例子,这里是我最终如何解决它以反序列化一个对列表:

public class MyPairDeserializer extends JsonDeserializer<Pair<MyClassA, MyClassB>> {

  static private ObjectMapper objectMapper = null;

  @Override
  public Pair<MyClassA, MyClassB> deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
    if (objectMapper == null) {
      objectMapper = new ObjectMapper();
      objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    }
    JsonNode treeNode = jsonParser.getCodec().readTree(jsonParser);
    MyClassA first = objectMapper.treeToValue(treeNode.get("first"), MyClassA.class);
    MyClassB second = objectMapper.treeToValue(treeNode.get("second"), MyClassB.class);
    return Pair.of(first, second);
  }

}

...
SimpleModule module = new SimpleModule();
module.addDeserializer(Pair.class, new MyPairDeserializer());
objectMapper.registerModule(module);
List<Pair<MyClassA, MyClassB>> myData = objectMapper.readValue(file..., new TypeReference<List<Pair<Class<MyClassA>, Class<MyClassB>>>>() {
...

请注意反序列化程序中嵌入的ObjectMapper。它用于反序列化配对中的“第一个”和“第二个”。

羊舌墨一
2023-03-14

我认为您需要为该属性实现一个定制的反序列化程序,如下面的答案所示https://stackoverflow.com/a/19167145/1905015.您可以在属性上方放置@JsonDeserialize注释。

 类似资料:
  • 问题内容: 我在反序列化以下json数组时遇到麻烦(对不起,大小): 如果将其粘贴到json-viewer中,则会得到以下结构: 现在,包含具有坐标的数组的数组具有可变大小。所以我想在Java中,整个对象应该是一个数组,其中包含数组的集合,每个数组都包含一个。就像是 但是gson不接受这一点。我收到以下错误消息: 这似乎很奇怪,因为对我来说好像不像一个数组。但这可能使我感到困惑,或多或少地迷路了…

  • 我收到来自第3方服务提供商的JSON响应,其中包含一系列对象。当我尝试使用Jackson api反序列化JSON时。我收到以下异常 我的回答是 我的POJO课是这样的 我正在尝试使用以下代码反序列化JSON 如果我试着去做 它在BEGIN_对象本身失败。 如何使用数组读取和反序列化JSON。我应该编写自己的反序列化器吗? 编辑如果我使用JSON字符串而不是流,那么我就能够取回所有Java对象。但为

  • 我似乎很专注于如何去硬化数组数组。我对这些工具很陌生,无法处理JSON文件,我能够去硬化来自国家(https://restcountries.eu/rest/v2/all)的REST应用编程接口的JSON,但我现在正试图从开放天空应用编程接口(https://opensky-network.org/api/states/all?lamin=45.8389 我有这门课: 有能手和二传手 还有这个:

  • 问题内容: 我有一个由数据库支持的小应用程序(SQLite,但与问题无关)。我已经定义了一些类型,例如: 这些类型映射到数据库中的表。当我读取数据时,我最终会写出这样的函数: (为了清楚起见,我省略了处理错误。) 编写这样的函数确实很烦人,感觉就像创建了很多样板。有没有更惯用的方法将一组SqlValues转换为Haskell数据? 问题答案: 库中似乎没有任何标准方法可用于此目的。如果您感觉特别敏

  • 我将用混合对象序列化/反序列化对象数组。因此,我创建了一个MyList类,并用字符串、int和date对象填充items数组。与jackson的连载效果很好。json字符串如下所示: 但是在反序列化时,json字符串date被解析为整数。因此,我创建了一个自己的类MyDate,将日期包装为字段名为“date”的json对象。新的结果是: 现在结果是LinkedHashMap。 以下是我的代码示例:

  • 问题内容: 我很好奇序列化和反序列化的方式。我使用关键字“ json”和“ tuple”进行搜索,但找不到所需的内容。 问题答案: 我通过和Json.net进行测试,测试代码如下。结果显示可序列化和可反序列化。因此,我可以在应用程序中使用它们。 测试代码 注释 在将序列化到字符串{“项目1”:“一”,“项目2”:“嘻嘻”,“项目3”:真正},并且它可以被反序列化回类型。