我无法正确理解运行此代码时出现的错误:
InputStream is = this.getClass().getClassLoader().getResourceAsStream(filename);
String jsonTxt = IOUtils.toString(is);
JSONArray json = (JSONArray) JSONSerializer.toJSON(jsonTxt);
JSONObject metadatacontent = json.getJSONObject(0);
ObjectMapper mapper = new ObjectMapper();
mapper.readValue(metadatacontent.toString(), MetadataContentBean.class.getClass());
错误:
org.codehaus.jackson.map.JsonMappingException: 无法反序列化实例 java.lang.Class超出了START_OBJECT 令牌在[来源: java.io.StringReader@e3b895;行:1, 专栏:1] at org.codehaus.jackson.map.JsonMappingException.from(JsonMappingException.java:159) 在 org.codehaus.jackson.map.deser.StdDeserializationContext.mappingException(StdDeserializationContext.java:192) 在 org.codehaus.jackson.map.deser.StdDeserializer $ ClassDeserializer.deserialize(StdDeserializer.java:439) 在 org.codehaus.jackson.map.deser.StdDeserializer $ ClassDeserializer.deserialize(StdDeserializer.java:421) 在 org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:1588) 在 org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1116) 在 com.path.parser.JSon.Parser(JSon.java:65) 在 com.path.parser.JSon.main(JSon.java:29)
这意味着什么?
如果我知道这一点,我可以找出我的错误。
答案 0 :(得分:11)
你的问题是最后一行:
MetadataContentBean.class.getClass()
这意味着“获取MetadataContentBean类的Class
对象,然后获取该Class
对象的Class
对象”....如果你明白我的意思。因此,您要求杰克逊将您的JSON反序列化为Class
对象,而该对象不知道该怎么做。
这应该只是
MetadataContentBean.class
答案 1 :(得分:4)
这可能与另一个问题有关,但只是为了完成答案,错误来自差异:类型“java.lang.Class”序列化为JSON字符串(类名本身),而不是像JSON对象那样豆是。所以deserializer希望看到一个JSON String,而是看到一个JSON对象(以START_OBJECT开头)并抛出异常。