2

こんにちは!

私は次のような.jsonファイルを使用しています:

[{  
  "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"  
  }]  

私は3つのコンポーネントでBeanを作成しました:

 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; 
 }   }

そして、SourceFileBeanの例を追加しますが、他も同様です。

public class SourceFileBean {

 private String source;
 public String getSource() {
  return source;
 }
 @JsonProperty("SourceFile")
 public void setSource(String source) {
  this.source = source;
 }
}

メインプログラムで私はこの呼び出しを行います:

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);

しかし、実行するとこのエラーが発生します。理由はわかりません。

org.codehaus.jackson.map.JsonMappingException:com.path.bean.SourceFileBeanのインスタンスを構築できません。問題:[ソース:java.io.StringReader@12d7a10;に適切なクリエーターメソッドが見つかりません。行:1、列:2] at org.codehaus.jackson.map.JsonMappingException.from(JsonMappingException.java:159)at org.codehaus.jackson.map.deser.StdDeserializationContext.instantiationException(StdDeserializationContext.java:212)at org .codehaus.jackson.map.deser.BeanDeserializer.deserializeFromString(BeanDeserializer.java:415)at org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:291)at org.codehaus.jackson.map.deser .SettableBeanProperty.deserialize(SettableBeanProperty.java:135)at org.codehaus.jackson.map.deser.SettableBeanProperty $ MethodProperty.deserializeAndSet(SettableBeanProperty.java:

何か助けは?前もって感謝します!

4

3 に答える 3

0

これは、JSONが配列を表し、その中に単一のオブジェクトがあるためだと思います。この配列データをの単一インスタンスに逆シリアル化するようにJacksonに要求していますがMetadataContentBean、これは実行できません。

[]JSOnの周囲からブラケットを削除して、再試行してください。

于 2010-07-01T10:44:07.103 に答える
0

問題は、構文と、プログラムのフィールドの書き方に関するものでした。jsonファイルと同じであることを絶対に確認する必要があります。

一方で

"SourceFile": "videos / KobeAlleyOop.flv"

はフィールドが1つしかないフィールドなので、Beanを作成する必要はありません。

それはあなたが多くの時間を腰にかける可能性がある愚かなエラーです!!! :s

于 2010-07-02T07:55:33.850 に答える
0

1つの問題は、そこに不要なコードがあることです。3行目と4行目は不要であり、問​​題を引き起こす可能性があります。だから、ただやってください:

  InputStream is = this.getClass().getClassLoader().getResourceAsStream(filename);  
  String jsonTxt = IOUtils.toString(is);  
  ObjectMapper mapper = new ObjectMapper(); 
  MetadataContentBean[] beans = mapper.readValue(metadatacontent.toString(),MetadataContentBean[].class);

そのため、そこでjson.orgのパーサーを使用する必要はありません。これは正確な問題を説明しないかもしれませんが、二次的な問題を回避するのに役立ちます。

しかし、例外をスローする特定の問題はsimple(r)です。typeのJSON値はStringですが、それからオブジェクト(bean)を作成しようとしています。これを機能させるには、1つのString引数を取るパブリックコンストラクターを追加します。これで機能するはずです。必要に応じて(またはパブリックコンストラクターでない場合)、@ JsonCreatorで注釈を付けることができますが、それは必須ではありません。

逆に、BeanをJSON文字列としてシリアル化する場合は、次のようなことを行う必要があります。

@JsonValue public String asString() { return valueOfThisAsString; }
于 2010-07-09T23:26:13.080 に答える