【问题标题】:com.fasterxml.jackson.databind.exc.MismatchedInputException: Can not deserialize instance of object out of START_ARRAY token - JAVAcom.fasterxml.jackson.databind.exc.MismatchedInputException:无法从 START_ARRAY 令牌中反序列化对象实例 - JAVA
【发布时间】:2021-01-12 03:25:23
【问题描述】:

获取 MismatchedInputException。在这里搜索了很多问题,但还没有找到解决方案。

代码:

import /path/to/file/Bars;
List<Bars> barResults = null;
public boolean validateData() throws IOException {
        boolean flag = false;
        try {
            if (Data.read() != -1) {
                BufferedReader reader = new BufferedReader(new InputStreamReader(Data));
                String line;
                while ((line = reader.readLine()) != null) {
                    line = "[{" + line;
                    System.out.println(line);
                    ObjectMapper om = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
                    Bars ms = om.readValue(line, Bars.class);
                    System.out.println(ms);
                    break;
                }
                reader.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return flag;
    }

Json: //例如缩短

[{"createdOn":1601058721310,"lastUpdated":null,"lastUpdatedBy":null,"createdBy":null,"appId":null,"logical":"N","calculationDateTime":1601058721310,"mtaVersionNumber":null,"storageRegionName":"texas","createdOnDate":1601058721310,"lastUpdatedDate":0}]

输出:

[{"createdOn":1601058721310,"lastUpdated":null,"lastUpdatedBy":null,"createdBy":null,"appId":null,"logical":"N","calculationDateTime":1601058721310,"mtaVersionNumber":null,"storageRegionName":"texas","createdOnDate":1601058721310,"lastUpdatedDate":0}]
com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `object` out of START_ARRAY token
 at [Source: (StringReader); line: 1, column: 1]

我不确定是什么导致了这个异常。当我启动应用程序时,我运行并读取 JSON 很好..但抛出异常。

【问题讨论】:

    标签: java json spring-boot spring-data-jpa jackson-databind


    【解决方案1】:

    在您对readValue 的调用中,您将Bars.class 作为第二个参数传递,它告诉Jackson 第一个参数(line) 是Bars 实例的JSON 表示,这就是它应该返回的内容。

    JSON 对象以 { 开头,并且因为您已要求 Jackson 反序列化对象,它希望输入以 { 开头。但是您传入的 JSON line 不是 Bars 实例:它是一个包含 Bars 实例的数组,它以 [ 开头。

    所以它会抛出一条错误消息,上面写着“有人告诉我有一个对象会在这里,但我发现了一个数组的开头”。

    要修复它,您可以要求 Jackson 通过将 readValue 的第二个参数更改为 Bars[].class 来反序列化“Bar”对象数组,然后从数组中提取 bar 实例,或者您可以停止添加"[" 到行首,将 "]" 从行尾剪掉,这样它就只是一个对象,而不是包含该单个对象的数组。

    【讨论】:

    • 如何从数组中提取 bar 实例?
    猜你喜欢
    • 2017-10-10
    • 1970-01-01
    • 2020-09-07
    • 2021-11-24
    • 1970-01-01
    • 2014-10-20
    • 2020-09-23
    • 1970-01-01
    • 2016-07-30
    相关资源
    最近更新 更多