2011-01-26 19 views
3

私はAndroidプロジェクトでJacksonをObjectMapper経由で使用しようとしています。私はジャクソンが私のJSONオブジェクトをデシリアライズするために働いて得ることができるかどうかを確認するためにユニットテストを書いているJacksonを使用してJSONオブジェクトをPOJOにデシリアライズ

public class Product { 
    @JsonProperty("title") 
    String title; 
    @JsonProperty("vendor") 
    String vendor; 

    public void setTitle(String title){ this.title = title; } 
    public void setVendor(String vendor){ this.vendor = vendor; } 

    public String getTitle() { return title; } 
    public String getVendor() { return vendor; } 
} 

次のように

私のPOJOです。

Context ctx; 

public void setUp() throws Exception { 
    super.setUp(); 
    ctx = getContext(); 
} 

public void testConvertJSONToProduct() throws Exception { 
    ObjectMapper m = new ObjectMapper(); 
    Product product = m.readValue(ctx.getAssets().open("foo.json"), Product.class); 

    assertEquals("Macbook", product.getTitle()); 
} 

は私の実際のJSONファイルは、私は私の製品に設定されたものよりもはるかに多くの情報が含まれていますが、私はちょうどそれが働いて取得したいです。大きなファイルを使用すると、Productが作成されますが、すべての値はnullに設定されます。私は、これが原因でそこにあるすべてのデータのかもしれないと思ったので、私は次のものが含まれ、別のファイル(foo.json)作成:

{"title" : "Macbook", "vendor" : "Apple"} 

私も同じ問題を取得していたとします。

+0

使用しているジャクソンのバージョンは? @JsonPropertyはバージョン1.0以降のフィールド注釈としてのみ使用できます。 –

+0

jackson-(core/mapper)-asl-1.6.4 – csaunders

答えて

1

"title"(Bean命名規則に従って)を意味するゲッターとセッターがあるので、これらの@JsonPropertyアノテーションは必要ないことに注意してください。いずれにせよ、コードはあなたが示したように機能するはずです。

まず、ctxt.getAssets()。open()が空のコンテンツを返さないことを最初に確認しますか?それは目立つ唯一のことです。

+0

私は混乱の主な原因であるテストを実行している間にいくつかの間違いをしていることに気付きました。私はあなたのコメントを正しいものとしてマークするつもりです。なぜなら、それがジャクソン注釈の正しい使い方を明確にしているからです。 – csaunders

関連する問題