如何解决com.fasterxml.jackson.databind.exc.MismatchedInputException:无法从START_ARRAY令牌中反序列化对象实例-JAVA
获取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,"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很好。但是抛出异常。
解决方法
在调用readValue
时,您要传递Bars.class
作为第二个参数,这告诉杰克逊第一个参数(line
)是Bars
的JSON表示形式实例,这就是它应该返回的内容。
JSON对象以{
开头,并且由于您已要求Jackson对该对象反序列化,因此它希望输入以{
开头。但是,您传入的JSON line
不是Bars
实例:它是一个包含Bars
实例的数组,并且以[
开头。
因此它抛出一条错误消息,提示“有人告诉我对象在这里,但我却找到了数组的开头”。
要解决此问题,您可以要求Jackson通过将readValue
的第二个参数更改为Bars[].class
来反序列化“ Bar”对象的数组,然后从该数组中提取bar实例,或者可以停止在行的开头添加“ [”,并在行的末尾切掉“]”,以便它只是一个对象,而不是包含该对象的数组。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。