HI!Problème avec les haricots et la bibliothèque Jackson
Je travaille avec un fichier .json, comme ceci:
[{
"SourceFile": "videos/KobeAlleyOop.flv",
"ExifTool": {
"ExifToolVersion": 8.22,
"Warning": "Truncated 'mdat' data"
},
"System": {
"FileName": "KobeAlleyOop.flv",
"Directory": "videos",
"FileSize": "4.8 MB",
"FileModifyDate": "2010:06:15 14:57:24+02:00",
"FilePermissions": "rwxr-xr-x"
},
"File": {
"FileType": "MP4",
"MIMEType": "video/mp4"
}]
J'ai fait un haricot avec 3 composants:
public class MetadataContentBean {
SourceFileBean sourceFileBean;
FileBean fileBean;
SystemBean systemBean;
public FileBean getFileBean() { return fileBean; }
@JsonProperty("File")
public void setFileBean(FileBean fileBean) {
this.fileBean = fileBean; }
public SystemBean getSystemBean() {
return systemBean; }
@JsonProperty("System")
public void setSystemBean(SystemBean systemBean) {
this.systemBean = systemBean; }
public SourceFileBean
getSourceFileBean() {
sourceFileBean.getSource(); return
sourceFileBean; }
@JsonProperty("SourceFile")
public void setSourceFileBean(SourceFileBean
sourceFileBean) {
this.sourceFileBean = sourceFileBean;
} }
Et j'ajoute un exemple de SourceFileBean, les autres sont similaires :
public class SourceFileBean {
private String source;
public String getSource() {
return source;
}
@JsonProperty("SourceFile")
public void setSource(String source) {
this.source = source;
}
}
Dans le programme principal que je fais cet appel:
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);
Mais je reçois cette erreur quand je le lance, je ne sais pas pourquoi:
org.codehaus.jackson.map.JsonMappingException: Impossible de construire instance de com.path. bean.SourceFileBean, problème: aucune méthode de création appropriée trouvé à [Source: [email protected]; ligne 1, colonne : 2] à org.codehaus.jackson.map.JsonMappingException.from (JsonMappingException.java:159) à org.codehaus.jackson.map.deser.StdDeserializationContext.instantiationException (StdDeserializationContext.java: 212) à org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromString (BeanDeserializer.java:415) à org.codehaus.jackson.map.deser.BeanDeserializer.deserialize (BeanDeserializer.java:291) à org.codehaus.jackson.map.deser.SettableBeanProperty.deserialize (SettableBeanProperty.java:135) au org.codehaus.jackson.map.deser.SettableBeanProperty $ MethodProperty.deserializeAndSet (SettableBeanProp erty.java:221) à org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObject (BeanDeserializer.java:390) à org.codehaus.jackson.map.deser.BeanDeserializer.deserialize (BeanDeserializer.java: 286) à 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)
Toute aide? Merci d'avance!
:-) Voir ma réponse, toujours; il est vrai que vous n'avez pas besoin d'un haricot, mais si vous le devez, vous pouvez le faire fonctionner. – StaxMan