【问题标题】:Java Jackson DeserializationJava Jackson 反序列化
【发布时间】:2020-11-04 23:16:52
【问题描述】:

我挣扎了一阵子,试图找到使用 fastxml.jackson 将以下结构反序列化为 java 对象的方法。

显然“NewYork”和“Boston”是键,而不是我必须解组到地图中的模式

Map<String, Object> jsonMap = mapper.readValue(jsonString,
                    new TypeReference<Map<String,Object>>(){});

但是jsonMap返回的是LinkedHashMap,key是“NewYork”,value是另一个LinkedHashMap。在第二个内部映射中,键是“schedules”,值是 LinkedHashMap 的列表。第三个内图,key,value分别是 “日期”:“2020-10-31”, “航班号”:“UA110”, “出发”:“下午 17:30”

我想要的是这样的java模型

public class FlightInfo {

   Map<String, List<Schedule>> info;
}

我做了一些搜索,想到JsonNode,Json节点必须知道属性名,在我的情况下,NewYork和Boston是不确定的。

我找不到这样做的方法。

{
  "NewYork": {
    "schedules": [
      {
        "date": "2020-10-31",
        "flightNo": "UA110",
        "depart": "17:30PM"
      },
       {
        "date": "2020-11-01",
        "flightNo": "UA230",
        "depart": "18:30PM"
      }
    ]
  },
 "Boston": {
    "schedules": [
      {
        "date": "2020-11-01",
        "flightNo": "AM110",
        "depart": "08:00AM"
      },
       {
        "date": "2020-11-01",
        "flightNo": "CA230",
        "depart": "10:30AM"
      }
    ]
  }
}

谢谢

【问题讨论】:

  • 请编辑问题并发布您正在尝试的代码和具体问题。谢谢你看过这里吗-tutorials.jenkov.com/java-json/…
  • 感谢@OldProgrammer,我在您提供的链接中没有找到任何有用的内容。

标签: java json jackson deserialization


【解决方案1】:

JSON 字符串不适应您预期的数据模型 Map&lt;String,Object&gt;Map&lt;String, List&lt;Schedule&gt;&gt;。实际上有两个级别的映射,NewYork -> schedules -> List Of Schedule

所以我们应该使用下面的 TypeReference 和两级 Map 来做反序列化

mapper.readValue(jsonString, new TypeReference<Map<String, Map<String, List<Schedule>>>>(){});

当然,如果您坚持使用一级映射,您可以修改数据,如下所示。因此我们可以使用一个简单的版本TypeReference&lt;Map&lt;String, List&lt;Schedule&gt;&gt;&gt;

{
  "NewYork": [
      {
        "date": "2020-10-31",
        "flightNo": "UA110",
        "depart": "17:30PM"
      },
       {
        "date": "2020-11-01",
        "flightNo": "UA230",
        "depart": "18:30PM"
      }
 ],
 "Boston": [
      {
        "date": "2020-11-01",
        "flightNo": "AM110",
        "depart": "08:00AM"
      },
       {
        "date": "2020-11-01",
        "flightNo": "CA230",
        "depart": "10:30AM"
      }
    ]
}

【讨论】:

    猜你喜欢
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 2017-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-17
    • 2021-01-19
    相关资源
    最近更新 更多