【问题标题】:How can I serialize this JSON using Jackson annotations?如何使用 Jackson 注释序列化此 JSON?
【发布时间】:2010-12-10 15:39:21
【问题描述】:

我有以下 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 属性值?

P.S.:我真的不想让我的 fields 对象作为...

private Map<String, String> fields;

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

谢谢 ;-)

菲利普

【问题讨论】:

  • 另外,当我尝试序列化这些映射时,我得到:I/O 错误:无法从 START_OBJECT 令牌中反序列化 java.lang.String 的实例

标签: java json serialization jackson


【解决方案1】:

好的,对于那个 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 数组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-07
    • 1970-01-01
    • 2014-11-11
    • 2020-04-11
    • 2018-04-04
    • 1970-01-01
    相关资源
    最近更新 更多