Jackson Annotation选择在序列化时删除属性名称

时间:2015-09-15 11:44:20

标签: java json serialization jackson

美好的一天,我想在将Pojo序列化为json时删除属性名称。我有以下课程

public class Field {

    private List<SubFieldItems> subFieldItems;

    public List<SubFieldItems> getSubFieldItems() {
        return subFieldItems;
    }

    public void setSubFieldItems(List<SubFieldItems> subFieldItems) {
        this.subFieldItems = subFieldItems;
    }
   }

和SubFieldItems类:

        public class SubFieldItems {
    @JsonPropertyOrder

        private String name;
        private List<String> items;


        public SubFieldItems(String name, List<String> items) {
            this.name = name;
            this.items = items;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public List<String> getItems() {
            return items;
        }

        public void setItems(List<String> items) {
            this.items = items;
        }

//tried doing this
      /*  @JsonValue
        @Override
        public String toString() {
            return "{" +
                    " \"name\":" + "\"" + name + "\"" +
                    ",\" items\":" + items +
                    '}';
        }*/
    }

当我序列化时,json输出是

{
  "field": {
    "subFieldItems": [
      {
        "name": "brands",
        " items": []
      }
    ]
  }
}

但我想让subFieldItems值没有像这样的属性名:

   {
      "field": {
            [
          {
            "name": "brands",
            " items": []
          }
        ]
      }
    }

我可以使用杰克逊注释,我尝试在toString方法中使用@JsonValue来强制注释,但我不断得到奇怪的结果。请任何帮助表示赞赏。感谢

1 个答案:

答案 0 :(得分:11)

您想要的JSON无效,也许这就是您想要的:

{
  "field": [
    {
      "name": "brands",
      "items": []
    }
  ]
}

(请注意,我已经在"field":之后移除了支撑,以及其匹配的右括号。)

在这种情况下,您可能会发现@JsonValue annotation有用:

  

@JsonValue:每个属性标记表示POJO应该使用属性的值来完成序列化,通常是java.lang.String(类似于注释toString()方法)。

试试这个:

public class Field {

    private List<SubFieldItems> subFieldItems;

    @JsonValue
    public List<SubFieldItems> getSubFieldItems() {
        return subFieldItems;
    }

    public void setSubFieldItems(List<SubFieldItems> subFieldItems) {
        this.subFieldItems = subFieldItems;
    }
}