6

我有以下 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 字段“字段”是哈希图,而不是列表。
我的问题是:是否有任何“神奇”注释可以让 Jackson 将映射键识别为 pojo 属性名称,并将映射值分配给 pojo 属性值?

PS:我真的不想让我的字段对象作为......

private Map<String, String> fields;

...因为在我现实世界的 json 中,我在地图值中有复杂的对象,而不仅仅是字符串...

谢谢 ;-)

菲利普

4

1 回答 1

12

好的,对于那个 JSON,您只需稍微修改您的示例,例如:

public class MyPojo {
  public Fields fields;
}

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

因为对象的结构需要与 JSON 的结构保持一致。当然,您可以使用 setter 和 getter 代替公共字段(甚至可以使用构造函数代替 setter 或字段),这只是最简单的示例。

您的原始课程将产生/使用 JSON 更像:

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

因为列表映射到 JSON 数组。

于 2010-12-10T18:46:46.530 回答