代码之家  ›  专栏  ›  技术社区  ›  Sunny

JSON序列化具有不同属性名的数据

  •  1
  • Sunny  · 技术社区  · 8 年前

    我有一个输入json,如下所示:

    {
        "stress": {
          "FxPOS": {
            "SX": [
              -14.2581,
              -15.6962,
              -12.6547,
              -13.639,
              -6.305,
              7.0567,
              15.508
            ]
          }
        }
    }
    

    我试图把它映射到Java类,如下所示:

    public class DTO implements Serializable {
            private static final long serialVersionUID = -1L;
            private Stress stress;
    
            @Getter
            @Setter
            @JsonAutoDetect(getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE)
            public static class Stress implements Serializable {
    
                private static final long serialVersionUID = 5133888753296054639L;
                @JsonSerialize
                @JsonProperty("FxPOS")
                private Config fxPOS;
                }
                }
    
    
    
       @Getter
        @Setter
        @NoArgsConstructor
        @JsonSerialize
        @JsonAutoDetect(getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE)
        public class Config implements Serializable {
            /**
             * 
             */
            private static final long serialVersionUID = -7335939612336666586L;
            @JsonSerialize
            @JsonProperty("SX")
            private String sx;
            }
    

    在映射数据并将其重新序列化到JSON AM之后,得到以下输出:

    {
            "stress": {
              "fxPOS": {
                "sx": [
                  -14.2581,
                  -15.6962,
                  -12.6547,
                  -13.639,
                  -6.3305,
                  7.0567,
                  15.508
                ]
              }
            }
        }
    

    有人能告诉我我哪里做错了吗? 任何帮助都将不胜感激。

    1 回复  |  直到 8 年前
        1
  •  1
  •   brass monkey    8 年前

    我认为您可以通过定义显式getter和setter方法并用注释来实现这一点。 @JsonGetter 和 @JsonSetter . 在这些注释中,可以指定要反序列化的名称以及要序列化的名称。否则,该名称将仅从属性名称派生。

    例如:

    public class DTO implements Serializable {
        private static final long serialVersionUID = -1L;
        private Stress stress;
    
        public static class Stress implements Serializable {
    
            private static final long serialVersionUID = 5133888753296054639L;
    
            private Config fxPOS;
    
            @JsonGetter("FxPOS")
            public Config getFxPOS() {
                return fxPOS;
            }
    
            @JsonSetter("FxPOS")
            public void setFxPOS(int fxPOS) {
                this.fxPOS = fxPOS;
            }
        }
    }
    
    @Getter
    @Setter
    @NoArgsConstructor
    @JsonSerialize
    public class Config implements Serializable {
    
        private static final long serialVersionUID = -7335939612336666586L;
    
        private String sx;
    
        @JsonGetter("SX")
        public String getSx() {
            return sx;
        }
    
        @JsonSetter("SX")
        public void setRed(int sx) {
            this.sx = sx;
        }
    }