【问题标题】:Java - Jackson array mappingJava - 杰克逊数组映射
【发布时间】:2012-10-01 02:33:16
【问题描述】:

鉴于以下 JSON

{
    "obj" : {
        "f1" : "blah",
        "f2" : "blah",
        "f3" : [{"z1" : "blah", "arr" : [{"m1" : "blah", "m2" : "blah"}]}]
    }
}

我已经厌倦了使用 @JsonProperty@JsonCreator 来映射 "m1""m2" 值,但没有运气。

@JsonCreator public Card(Map<String,Object> props) { } 出现以下错误:

Argument #0 of constructor [constructor for MyObj$Obj$Card, annotations: {interface com.fasterxml.jackson.annotation.JsonCreator=@com.fasterxml.jackson.annotation.JsonCreator()}] has no property name annotation; must have name when multiple-paramater constructor annotated as Creator

@JsonCreator public Card(@JsonProperty("m1") String m1, @JsonProperty("m2") String m2,){} 出现以下错误:

Argument #0 of constructor [constructor for MyObj$Obj$Card, annotations: {interface com.fasterxml.jackson.annotation.JsonCreator=@com.fasterxml.jackson.annotation.JsonCreator()}] has no property name annotation; must have name when multiple-paramater constructor annotated as Creator

"arr"的字段如何使用Jackson注解映射? 谢谢。

更新

我还尝试在 f3 类中包含 @JsonProperty("arr") private Card[] cards;,但它也没有帮助。

更新 2

我在上面的更新中更改了数组类型,现在我没有收到错误但它的行为不像我希望的那样(我想处理映射)。

是否有机会以我可以纠正的方式解释错误。

【问题讨论】:

  • 尝试@JsonProperty("arr") 私有列表 卡片
  • @Nailgun,我收到错误 No suitable constructor found for type [simple type, class MyObj$Obj$Card]: can not instantiate from JSON object (need to add/enable type information?) at [Source: java.io.StringReader@751bbe4f; line: 1, column: 201] (through reference chain: MyObj["obj"]->Obj["cards"])。有什么线索吗?
  • 你能展示你使用的类吗?
  • @eugen,您能否详细说明错误及其原因?
  • 没有类我不确定,但如果它们是内部类(非静态),失败是正常的,jackson 无法反序列化为这种类型。

标签: java json jackson gson


【解决方案1】:

如果 m1 和 m2 不是硬编码属性,则应使用 TypeReference 将 json 转换为 java map。看到这个entry

否则,您可以将“arr”映射到具有字符串 m1 和字符串 m2 作为字段的 Arr 类。

【讨论】:

  • 但是 'arr' 是一个数组。因此,它应该映射到数组或该数组所包含的对象列表。有没有机会就您的最后建议进行一次 sn-p?
  • 我不确定我理解你想要什么。您始终可以使用 Map.entrySet() 将这些对象作为集合访问。我可以想象如何反序列化 {"messages":["msg 1","msg 2","msg 3"]} 或 {"messages":["name":"val1","name":"val2" ]} 到一个列表,但不是你的例子。
  • 能否请您详细说明错误,即错误的含义。也许这会让我解决这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-11
  • 1970-01-01
  • 2012-11-15
  • 2011-10-22
  • 1970-01-01
  • 2012-11-19
  • 1970-01-01
相关资源
最近更新 更多