对象转换为json如何修改属性键?

时间:2014-11-11 09:21:32

标签: json jackson

我有一个json喜欢

"weatherInfo":{
            "city":"北京",
            "publishDate":"2014年3月4日",
            "week":"星期二",
            "tempRange":"8℃~-3℃",
            "feelTemp":"10",
            "time":"16:05",
            "temp":"11",
            "WD":"北风",
            "WS":"2级",
            "SD":"27%",                      
            "weather1":"晴"
          }

我的班级是

public class WeatherVO implements Serializable{

    private static final long serialVersionUID = 2348480036959754071L;

    @JsonProperty(value="weatherinfo")
    private WeatherInfoVO weatherInfoVO;
    @JsonIgnoreProperties(ignoreUnknown=true)
    public class WeatherInfoVO{
        //城市
        @JsonProperty(value="city")
        private String city;
        //发布日期
        private String publishDate;
        //发布时间
        @JsonProperty(value="time")
        private String publishTime;
        //星期
        private String week;
        //温度范围
        private String tempRange;
        //当前时刻温度
        @JsonProperty(value="temp")
        private String currentTemp;
        //风向
        @JsonProperty(value="WD")
        private String windDirection;
        //风力
        @JsonProperty(value="WS")
        private String windForce;
        //当前时刻湿度
        @JsonProperty(value="SD")
        private String currentHumidity;
        //体感温度
        private String feelTemp;

        //天气描述
        private String weatherDesc;
   }
}

我想将json转换为对象,如:

WeatherVO weatherVO = objectMapper.readValue (jsonString, WeatherVO.class);

我希望返回json使用org.springframework.http.converter.json.MappingJacksonHttpMessageConverter类 并且返回json是

  

“weatherInfo”:{               “城市”: “北京”,               “publishDate”: “2014年3月4日”,               “周刊”: “星期二”,               “tempRange”: “8℃〜-3℃”,               “feelTemp”: “10”,               “时间”: “16:05”,               “温度”: “11”,               “WD”: “北风”,               “WS”: “2级”,               “SD”: “27%”,
              “weather1”: “晴”             }

但我希望像

一样回归
  

“weatherInfo”:{               “城市”: “北京”,               “publishDate”: “2014年3月4日”,               “周刊”: “星期二”,               “tempRange”: “8℃〜-3℃”,               “feelTemp”: “10”,               “publishTime”: “16:05”,               “currentTemp”: “11”,               “windDirection”: “北风”,               “WINDFORCE”: “2级”,               “currentHumidity”: “27%”,
              “天气”: “晴”             }

我该怎么做? 感谢您的任何建议和帮助。

1 个答案:

答案 0 :(得分:0)

你可以通过@JsonIgnore标记字段的getter然后创建另一个获取字段并将其标记为@JsonProperty的方法来实现。
我的建议是首先重命名你的字段以避免混淆。我把它重命名为你拥有的json。所以举个例子。

  public class WeatherInfoVO{

       private String city;
       private String publishDate;
       private String week;
       private String tempRange;
       private String feelTemp;
       private String time;
       private String temp;
       private String WD;
       private String WS;
       private String SD;
       private String weather1;
      //getters and setters

    }

然后在你的setters方法中标记相应的@JsonProperty。

    @JsonProperty(value="time")
    public void setTime(String time) {
     this.temp = temp;
    }

    @JsonProperty(value="temp")
    public void setTemp(String temp) {
        this.temp = temp;
    }

    @JsonProperty(value="WD")
    public void setWD(String WD) {
        this.WD = WD;
    }   

    @JsonProperty(value="WS")
    public void setWS(String WS) {
        this.WS = WS;
    }
    @JsonProperty(value="SD")
    public void setSD(String SD) {
        this.SD = SD;
    }
    @JsonProperty(value="weather1")
    public void setWeather1(String weather1) {
        this.weather1 = weather1;
    }
    //other setters here

并且在getter中,确保将@JsonIgnore添加到要重命名的字段中。由于您将其声明为@JsonIgnore,因此需要创建另一个getter并将其标记为@JsonProperty。只对您要重命名的字段执行此操作,在您的情况下,字段仅为时间,临时,WD,WS,SD和weather1。这是一个例子。

    @JsonIgnore
    public void getTime(){
     return time;
    }

    @JsonProperty(value="publishTime")
    public void getPublishTime(){
     return time;
    }

    @JsonIgnore
    public void getTemp(){
     return temp;
    }
    @JsonProperty(value="currentTemp")
    public void getCurrentTemp(){
     return temp;
    }

    @JsonIgnore
    public void getWD(){
     return WD;
    }

    @JsonProperty(value="windDirection")
    public void getWindDirection(){
     return WD;
    }

    @JsonIgnore
    public void getWS(){
     return WS;
    }

    @JsonProperty(value="windForce")
    public void getWindForce(){
     return WS;
    }

    @JsonIgnore
    public void getSD(){
     return SD;
    }

    @JsonProperty(value="currentHumidity")
    public void getCurrentHumidity(){
     return SD;
    }

    @JsonIgnore
    public void getWeather1(){
     return weather1;
    }

    @JsonProperty(value="weather")
    public void getWeather(){
     return weather1;
    }