java - Jackson Annotation 序列化时删除属性名称的选项

标签 java json serialization jackson

大家好,我想在将 Pojo 序列化为 json 时删除属性名称。我有以下类(class)

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": []
          }
        ]
      }
    }

我可以使用什么 Jackson 注释,我已经尝试在 toString 方法中使用 @JsonValue 来强制执行注释中的操作,但我总是得到奇怪的结果。请任何帮助表示赞赏。谢谢

最佳答案

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

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

(请注意,我已经删除了 "field": 之后的大括号及其匹配的右大括号)。

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

@JsonValue: per-property marker to indicate that the POJO should serialization is to be done using value of the property, often a java.lang.String (like annotation toString() method).

试试这个:

public class Field {

    private List<SubFieldItems> subFieldItems;

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

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

关于java - Jackson Annotation 序列化时删除属性名称的选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32585217/

相关文章:

java - 在 javafx 中设置舞台和场景的高度和宽度

iPhone 通过 POST 发送 Json 数组

ios - 在 swift 中从 json 数据中检索 Facebook 好友列表时遇到问题

使用Struts2-Json插件时Json序列化问题

Java Handler Post Delayed 任务不是准确的计时器

java - 同时读取数组线程安全吗?

c# - 在 C# 中使用德语小数分隔符对双值进行 XML 反序列化

java - 如何将 HashMap 和图像保存到同一文件

java - 发送 http post 请求不起作用

jquery - 将两个 JQuery.Map 合并为一个?