2011-01-26 96 views
3

我想通過ObjectMapper在Android項目中使用傑克遜。使用傑克遜反序列化JSON對象到POJOs

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

我已經寫了一個單元測試來看看我是否能得到傑克遜合作,反序列化JSON我的對象。

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文件包含了比我在我的產品已經設置了更多的信息,但我只想得到它的工作。使用較大的文件會導致產品被創建,但所有的值都被設置爲空。我想這可能是因爲所有這些都是在有數據的,所以我創建了另一個文件(foo.json),其中包含以下內容:

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

隨着這我也得到了同樣的問題。

+0

您正在使用哪個版本的Jackson? @JsonProperty只允許在版本1.0之後作爲字段註釋。 – 2011-01-26 18:11:37

+0

jackson-(核心/映射器)-asl-1.6.4 – csaunders 2011-01-26 18:33:12

回答

1

請注意,您不需要這些@JsonProperty註釋,因爲您擁有隱含「標題」(按照bean命名約定)的getter和setter。無論哪種方式,代碼應該像你所顯示的那樣工作。

我可能會先驗證ctxt.getAssets()。open()是否不返回空的內容?這是唯一突出的東西。