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: [ソース: java.io.StringReader@e3b895; で START_OBJECT トークンから java.lang.Class のインスタンスを逆シリアル化できません。行: 1、列: 1] 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) 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) でコム。

どういう意味ですか??

これを知っていれば、自分の間違いを見つけることができるかもしれません。

4

2 に答える 2

13

あなたの問題は最後の行です:

MetadataContentBean.class.getClass()

これは、「ClassMetadataContentBean クラスのオブジェクトを取得してから、そのオブジェクトのClassオブジェクトを取得Classする」という意味です。つまり、Jackson に JSON をClassオブジェクトにデシリアライズするように依頼していますが、その方法がわからないのです。

これはただのはずです

MetadataContentBean.class
于 2010-07-01T09:54:23.233 に答える
4

これはおそらく他の質問に関連していますが、答えを完成させるために、エラーは不一致から生じます。タイプ「java.lang.Class」は、BeanのようなJSONオブジェクトではなく、JSON文字列(クラス名自体)としてシリアル化されます。したがって、デシリアライザーはJSON文字列を予期し、代わりにJSONオブジェクト(START_OBJECTで始まる)を認識して例外をスローします。

于 2010-07-09T23:34:50.817 に答える