首页 > 解决方案 > JSON序列化为不同的值

问题描述

我有下面的json,我正在序列化

{
"name":"John",
"switch":"1"
},
{
"name":"Jim",
"switch":"0"
}

我想将它序列化为不同的名称所以我必须像下面那样做

class Data {
    private String name;
    private String flag;
    @JsonProperty("flag")
    public byte getFlag() {
      return flag;
    }

    @JsonProperty("switch")
    public void setSwitch(String s) {
      this.flag = flag;
    }
}

这样我就可以将其转换如下

{
"name":"John",
"flag":"1"
},
{
"name":"Jim",
"flag":"0"
}

现在我想将 numic 值分别映射到 Y 和 N 为 1 和 0。我能做到吗?

我希望我的最后一个字符串是这样的

{
"name":"John",
"switch":"Y"
},
{
"name":"Jim",
"switch":"N"
}

标签: javajsonjackson

解决方案


我同意@Gaël J,但如果您想继续,此代码更改可能会帮助您将 1/0 转换为 Y/N。

public class Application {

    @ToString
    static class Input {

        @JsonProperty("name")
        private String name;

        @JsonProperty("switch")
        private String flag;

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

        @JsonProperty("switch")
        public void setSwitch(String s) {
            for(SwitchMap valuePair : SwitchMap.values()){
                if(valuePair.getValue().equals(s)){
                    this.flag = valuePair.name();
                }
            }
        }
    }


    public static void main(String[] args) throws JsonProcessingException {
        String json = "{\n" +
                "\"name\":\"John\",\n" +
                "\"switch\":\"1\"\n" +
                "}";
        ObjectMapper mapper = new ObjectMapper();
        Input in = mapper.readValue(json, Input.class);
        System.out.println(mapper.writeValueAsString(in));
    }
}

用映射定义一个枚举

@Getter
public enum SwitchMap {

    Y("1"),
    N("0");

    private final String value;

    private SwitchMap(String value){
        this.value = value;
    }
}

推荐阅读