【问题标题】:ObjectMapper fails to deserialize - cannot deserialize instance of .... out of START_ARRAY tokenObjectMapper 无法反序列化 - 无法反序列化 .... 的实例超出 START_ARRAY 令牌
【发布时间】:2014-10-10 15:14:16
【问题描述】:

我有一个这样的 json:

{
  "games": [
      {
        "id": "mhhlhlmlezgwniokgawxloi7mi",
        "from": "425364_456@localhost",
        "to": "788295_456@localhost",
        "token": "xqastwxo5zghlgjcapmq5tirae",
        "desc": "6CeF9/YEFAiUPgLaohbWt9pC7rt9PJlKE6TG6NkA4hE=",
        "timestamp": 1412806372232
      },
      {
        "id": "62jzlm64zjghna723grfyb6y64",
        "from": "425364_456@localhost",
        "to": "788295_456@localhost",
        "token": "xqastwxo5zghlgjcapmq5tirae",
        "desc": "Z/ww2XroGoIG5hrgiWsU1P8YHrv4SxiYHHoojzt9tdc=",
        "timestamp": 1412806373651
      }
    ]
}

我正在尝试将其反序列化为带有ObjectMapper 的对象。正如您所看到的,它本质上是一个游戏列表。

我有这样的课程:

@JsonRootName(value="games")
public class GameJson{
    private List<Game> games;
// getters and setters

}

游戏类在这里:

public class Game{
    private String id;

    private String from;

    private String to;

    private String token;

    private String desc;

    private Instant timestamp;

    // getters and setters
}

在我的代码中,ObjectMapper 正在这样做:

ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);

GameJson json = mapper.readValue(
                       new FileInputStream(gamesFile), GameJson.class);

然后我得到这个错误:

无法从 START_ARRAY 令牌中反序列化 com.games.collection.GameJson 的实例

我正在尝试不同的方法来做到这一点,但没有运气。有人可以帮忙吗?

谢谢!

【问题讨论】:

    标签: java json jackson deserialization


    【解决方案1】:

    摆脱

    @JsonRootName(value="games")
    

    该注解将注解类型标识为映射到名为"games" 的JSON 键的JSON 对象的目标。在您的情况下,这是一个 JSON 数组。无法将数组反序列化到您的 GameJson 类中。

    As you stated in the comments,还需要去掉启用@JsonRootName的配置。

    mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);
    

    【讨论】:

    • 谢谢,但是你能告诉我它是一个数组而不是一个列表吗?
    • @SasankaPanguluri 这是一个 JSON 数组。 JSON 数组可以反序列化为 Collection 类型(ListSet)或 Java 数组。
    • @SasankaPanguluri Jackson 正在尝试将名为 games 的数组反序列化为 GameJson 对象,而不是将根 JSON 反序列化为 GameJson
    • 这是有道理的。你说的我试过了,还是不行。我删除了 mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);它奏效了。谢谢!
    • @SasankaPanguluri 啊,是的,我错过了你配置的那部分。不客气。
    猜你喜欢
    • 2014-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-12
    • 2017-03-20
    • 2017-10-10
    • 1970-01-01
    • 2020-09-23
    相关资源
    最近更新 更多