【问题标题】:JSON serialize to a different valueJSON 序列化为不同的值
【发布时间】:2021-08-02 19:15:40
【问题描述】:

我有以下正在序列化的 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"
}

【问题讨论】:

  • 你可以在 getter 中做任何你想做的事情。但是,我建议根本不要这样做,而是将您的业务类转换为另一个代表您的 JSON 模型的类。 恕我直言

标签: java json jackson


【解决方案1】:

我同意@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;
    }
}

【讨论】:

    猜你喜欢
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 2019-10-09
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多