FAQ-JSON

在用jackson-core-asl-1.9.10.jar和jackson-mapper-asl-1.9.10.jar两个包做json字符串转换Pojo对象时报如下异常:
org.codehaus.jackson.map.JsonMappingExceptionCan not deserialize instance of java.util.List out of START_OBJECT token

Java代码如下:
ObjectMapper mapper = new ObjectMapper();
String myajsonstr = "{"myname":{"first":"yu2","last":"shibo2"},"myflag":false,"myversion":"version-1.1","myage":31,"mygender":"FAMALE"}";
List myListBean = mapper.readValue(myajsonstr, new TypeReference>(){});

运行后的信息如下:
org.codehaus.jackson.map.JsonMappingException: Can not deserialize instance of java.util.List out of START_OBJECT token
  at [Source: java.io.StringReader@15a64e6; line: 1, column: 1]
at org.codehaus.jackson.map.JsonMappingException.from(JsonMappingException.java:163)
at org.codehaus.jackson.map.deser.StdDeserializationContex t.mappingException(StdDeserializationContex t.java:198)
at org.codehaus.jackson.map.deser.CollectionDeserializer.handleNonArray(CollectionDeserializer.java:149)
at org.codehaus.jackson.map.deser.CollectionDeserializer.deserialize(CollectionDeserializer.java:107)
at org.codehaus.jackson.map.deser.CollectionDeserializer.deserialize(CollectionDeserializer.java:97)
at org.codehaus.jackson.map.deser.CollectionDeserializer.deserialize(CollectionDeserializer.java:26)
at org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:2395)
at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1602)

上述问题在网上搜了好久都没找到解决的办法,最后只能根据报错信息去查jackson的API文档,这个过程比较痛苦,就是一个一个的做实验,根据错误信息中的 Can not deserialize instance of java.util.List out of START_OBJECT token这一句基本可以断定是类信息不能被反序列化,到jackson的API文档里( http://jackson.codehaus.org/1.8.8/javadoc/index.html )找到DeserializationConfig.Feature这个Enum类,发现其中有个ACCEPT_SINGLE_VALUE_AS_ARRAY属性,大致翻译了一下给的解释,意思是反序列化的作用是确定是否强制让非数组模式的json字符串与java集合类型相匹配。

【解决方法】:在 List myListBean = mapper.readValue(myajsonstr, new TypeReference>(){});这句之前加上mapper.configure(DeserializationConfig.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);这句, DeserializationConfig.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY属性默认值是false,其中的 MyAnotherJsonBean.java是笔者迎合json字符串自定义的Pojo类,里面就是基本属性和set、get方法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值