杰克逊序列化奇怪的输出

时间:2013-12-03 16:04:54

标签: java json jackson

我正在使用Jackson将json转换为对象。但是,json看起来不对劲。这就是我所看到的:

"interfaces": {"interfaces": [
  "HA_1",
  "HA_2"
]},

不应该有两个interfaces。我想看看:

"interfaces": [
  "HA_1",
  "HA_2"
]},

我不确定这是怎么回事。我可以告诉你我的转换课程:

@XmlAccessorType(XmlAccessType.NONE)
public class InterfacesRep implements Serializable {
    private static final long serialVersionUID = -1503363608473342020L;

    @XmlElement(name = "interface", type = String.class)
    private Collection<String> all = new ArrayList<String>();

    public InterfacesRep() {}

    public InterfacesRep(Collection<String> all) {
        this.all = all;
    }

    public Collection<String> getAll() {
        return all;
    }

    public void setAll(List<String> all) {
        this.all = all;
    }
}

外层阶级:

public class OuterRep {

    private static final long serialVersionUID = -1719378545790376294L;

    @XmlElement(name = "interfaces", type=InterfacesRep.class)
    private InterfacesRep interfaces;

    public OuterRep() {
    }

    public InterfacesRep getInterfaces() {
        return interfaces;
    }

    public void setInterfaces(InterfacesRep interfaces) {
        this.interfaces = interfaces;
    }
}

你知道为什么我看到"interfaces"两次吗?

1 个答案:

答案 0 :(得分:2)

因为您在两个级别的属性上定义它。外部类具有名为“interfaces”的属性名称,而内部类的Collection也称为“interfaces”。

这个最简单的修复(在我看来)是不使用Collection的包装类。只需将集合放在外部类中。

另外,为什么你使用Jackson的XML注释来序列化JSON?