【问题标题】:jackson deserialization of json with a numbered array带有编号数组的json的杰克逊反序列化
【发布时间】:2012-12-04 12:44:57
【问题描述】:

我有一个这样的 JSON 字符串:

{
  "1": {
    "entity_id":"1",
    "status":"canceled"
  },
  "2": {
    "entity_id":"2",
    "status":"pending"
  }
}

我正在努力寻找反序列化时要使用的正确设置。我偶然发现了上面映射"1""2" id 的样子。

我的对象映射器如下所示:

ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
mapper.configure(DeserializationConfig.Feature.READ_ENUMS_USING_TO_STRING, true);
mapper.configure(DeserializationConfig.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);

我尝试了各种类来将其映射到,但在使用以下行时它们都没有工作:

XXX jsonObject = mapper.readValue(json, XXX.class);

关于XXX 类应该是什么样子的任何建议?

【问题讨论】:

  • 这不是“编号数组”,而是“对象”——地图。
  • 你能对服务器做些什么吗?在这种情况下,服务器应该返回一个数组,而不是一个以数字为键的对象。
  • 不幸的是,我根本无法更改服务器的响应。它是第 3 方集成。
  • 感谢您为我指明正确的方向。我现在使用这一行来反序列化 json: Map map = mapper.readValue(message, new TypeReference>() {});

标签: java arrays json list jackson


【解决方案1】:

解决方法是将json映射成如下图:

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

在实际代码中,我将 Object 替换为映射 entity_id 和 status 等字段的 java 类

【讨论】:

    猜你喜欢
    • 2015-04-07
    • 1970-01-01
    • 1970-01-01
    • 2017-05-19
    • 2013-05-11
    • 2014-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多