2010-12-10 52 views
6

我有以下的JSON:如何使用Jackson注释序列化此JSON?

{ 
    fields : { 
      "foo" : "foovalue", 
      "bar" : "barvalue" 
    } 
} 

我写了一个POJO如下:

public class MyPojo { 

    @JsonProperty("fields") 
    private List<Field> fields; 

    static class Field { 
     @JsonProperty("foo") private String foo; 
     @JsonProperty("bar") private String bar; 

     //Getters and setters for those 2 
} 

这显然失败了,因为我的JSON场 “场” 是一个HashMap,而不是一个列表。
我的问题是:是否有任何“魔术”注释可以使杰克逊将地图键识别为pojo属性名称,并将地图值分配给pojo属性值?

PS:我真的不希望有我的领域对象作为...

private Map<String, String> fields; 

...因为在我的现实世界的JSON我在地图中值有复杂的对象,不只是串...

感谢;-)

菲利普

+0

此外,当我尝试序列化这些映射时,我得到:I/O错误:无法将START_OBJECT令牌的java.lang.String实例反序列化 – Philippe 2010-12-10 15:43:16

回答

12

好,对于JSON,你只需修改范例略,如:

public class MyPojo { 
    public Fields fields; 
} 

public class Fields { 
    public String foo; 
    public String bar; 
} 

由于对象的结构需要与JSON的结构对齐。当然,你可以使用setter和getters而不是public字段(甚至是构造函数而不是setter或fields),这只是最简单的例子。

你原来的班会产生/使用JSON更像:

{ 
    "fields" : [ 
    { 
     "foo" : "foovalue", 
     "bar" : "barvalue" 
    } 
    ] 
} 

因为列表映射到JSON阵列。

相关问题