Java-Jackson数组映射
给定以下JSONJava-Jackson数组映射,java,json,jackson,gson,Java,Json,Jackson,Gson,给定以下JSON { "obj" : { "f1" : "blah", "f2" : "blah", "f3" : [{"z1" : "blah", "arr" : [{"m1" : "blah", "m2" : "blah"}]}] } } 我已经厌倦了使用@JsonProperty和@JsonCreator来映射“m1”和“m2”值,但运气不好 使用@JsonCreator公共卡(地图道具){}我得到以下错误: Argumen
{
"obj" : {
"f1" : "blah",
"f2" : "blah",
"f3" : [{"z1" : "blah", "arr" : [{"m1" : "blah", "m2" : "blah"}]}]
}
}
我已经厌倦了使用@JsonProperty
和@JsonCreator
来映射“m1”
和“m2”
值,但运气不好
使用@JsonCreator公共卡(地图道具){}
我得到以下错误:
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
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公共卡(@JsonProperty(“m1”)字符串m1,@JsonProperty(“m2”)字符串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
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
如何使用Jackson注释映射“arr”
的字段?
谢谢
更新
我还试图包括@JsonProperty(“arr”)私人卡[]卡代码>在f3
类上,但它也没有帮助
更新2
我已经在上面的更新中更改了数组类型,现在我没有得到错误,但它的行为并不像我希望的那样(我希望处理映射)
如果m1和m2不是硬编码属性,那么您应该使用TypeReference将json转换为java映射。看到这个了吗
否则,您可以将“arr”映射到您的arr类,其中字符串m1和字符串m2作为字段。尝试@JsonProperty(“arr”)私有列表cards@Nailgun,我得到错误找不到类型[简单类型,类MyObj$Obj$Card]的合适构造函数]:无法从JSON对象实例化(需要添加/启用类型信息吗?)[来源:java.io。StringReader@751bbe4f;第1行,第201列](通过引用链:MyObj[“obj”]->obj[“cards”])
。有什么线索吗?你能展示一下你使用的类吗?@eugen,你有没有机会详细说明错误以及错误的原因?没有类我不确定,但是如果它们是内部类(非静态的)它失败是正常的,jackson无法反序列化为此类类型。但是“arr”是一个数组。因此,它应该映射到数组或数组所包含的对象列表。是否有机会获得有关您上次建议的片段?我不确定我是否理解您的要求。您可以始终使用Map.entrySet()作为集合访问这些对象。我可以想象如何将{“messages”:[“msg 1”、“msg 2”、“msg 3”]}或{“messages”:[“name”:“val1”、“name”:“val2”]}反序列化到一个列表中,而不是您的示例。请您详细说明错误,即错误的含义。也许这可以让我解决这个问题。