使用Jackson将JSON对象反序列化为POJO

时间:2011-01-26 17:33:55

标签: android json jackson

我正试图通过ObjectMapper在Android项目中使用Jackson。

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

我已经编写了一个单元测试,看看我是否可以让Jackson工作来反序列化我的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文件包含的信息比我在产品中设置的信息要多得多,但我只想让它工作。使用较大的文件会导致Product被创建,但是它的所有值都设置为null。我认为这可能是因为那里的所有数据,所以我创建了另一个文件(foo.json),其中包含以下内容:

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

我也遇到了同样的问题。

1 个答案:

答案 0 :(得分:1)

请注意,您不需要那些@JsonProperty注释,因为您拥有暗示“title”的getter和setter(根据bean命名约定)。无论哪种方式,代码都应该如您所示。

我可能先验证ctxt.getAssets()。open()不会返回空内容吗?这是唯一突出的事情。