6

我无法正确理解运行此代码时遇到的错误:

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:无法从 [Source: java.io.StringReader@e3b895; 的 START_OBJECT 令牌中反序列化 java.lang.Class 的实例;line: 1, column: 1] at org.codehaus.jackson.map.JsonMappingException.from(JsonMappingException.java:159) at org.codehaus.jackson.map.deser.StdDeserializationContext.mappingException(StdDeserializationContext.java:192) at org .codehaus.jackson.map.deser.StdDeserializer$ClassDeserializer.deserialize(StdDeserializer.java:439) at org.codehaus.jackson.map.deser.StdDeserializer$ClassDeserializer.deserialize(StdDeserializer.java:421) at 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。

这是什么意思??

也许如果我知道这一点,我可以找出我的错误。

4

2 回答 2

13

你的问题是最后一行:

MetadataContentBean.class.getClass()

这意味着“获取ClassMetadataContentBean 类的对象,然后获取该Class对象的Class对象”....如果您明白我的意思。所以你要求杰克逊将你的 JSON 反序列化到一个Class对象上,它不知道该怎么做。

这应该只是

MetadataContentBean.class
于 2010-07-01T09:54:23.233 回答
4

这可能与另一个问题有关,但只是为了完成答案,错误来自差异:类型“java.lang.Class”被序列化为 JSON 字符串(类名本身),而不是像 beans 这样的 JSON 对象。所以反序列化器希望看到一个 JSON 字符串,而不是看到一个 JSON 对象(以 START_OBJECT 开头)并抛出异常。

于 2010-07-09T23:34:50.817 回答