【问题标题】:Deserializing JSON containing invalid class identifiers反序列化包含无效类标识符的 JSON
【发布时间】:2020-05-21 19:28:40
【问题描述】:

在 Java 中,使用 Jackson,我想反序列化如下所示的 JSON:

{
  "123_ABC": {
    "XYZ": 768,
    "123_DATA": {
      "123_DEF": "",
      "123_ACT": "ZAC",
      "123_PAG": {
        "123_PAG_A": 1,
        "123_PAG_B": 1
      }
    }
  }
}

你们都知道,以数字开头的标识符在 Java(以及我听说过的所有编程语言)中都是无效的。

我已经知道如何使用@JsonProperty 来翻译字段名,但是处理类名超出了我的知识范围。

如果我定义了对应于 JSON 结构的类,但类名有效,有没有办法使用 Jackson 注释将 JSON 中的无效类 id 映射到我的有效类名?

【问题讨论】:

    标签: java json jackson deserialization


    【解决方案1】:

    我认为 @JsonProperty 应该很好地反序列化它。

    让我们创建一个包装类,它将123_ABC 作为类ValidClass 的属性。

    class Wrapper {
    
        @JsonProperty("123_ABC")
        private ValidClass validName;
    }
    

    现在,当你序列化时,它会像这样创建 JSON(或者可以使用它来反序列化)

    { "123_ABC":{ //PROPERTIES OF ValidClass HERE } }
    

    同样,您可以在更多的内部类中拥有不同的属性。

    如果您只支持123_ABC 用于反序列化并使用正确的字段名称进行序列化,您可以这样做

    @JsonAlias("123_ABC")
    private ValidClass validName;
    

    它将序列化为后续。

    {"validName": {//properties}}
    

    但反序列化可以同时使用

    {"validName": {//properties}}
    {"123_ABC": {//properties}}
    

    如果键不断变化,我建议在 Map 中反序列化它们。

    【讨论】:

      猜你喜欢
      • 2022-07-09
      • 1970-01-01
      • 1970-01-01
      • 2019-09-09
      • 2012-05-15
      • 1970-01-01
      • 1970-01-01
      • 2013-05-23
      相关资源
      最近更新 更多