【问题标题】:Using @JsonAnyGetter /@JsonAnySetter to Serialize JSON and change property name (Jackson)使用@JsonAnyGetter /@JsonAnySetter 序列化 JSON 并更改属性名称 (Jackson)
【发布时间】:2020-01-29 10:25:26
【问题描述】:

我的 JSON 格式如下:

{"pfm1":{"status":true,"candid":true},
"pfm2":{"status":false,"candid":true},
"pfm3":{"status":false,"candid":true}}

我想映射它并使用可变字符串名称更改 pfm1、pfm2、pfm3 的属性命名。您能否指出如何在下面的课程中完成。 输出应为:

{"Idname01":{"status":true,"candid":true}, 
"Idname02":{"status":false,"candid":true}, 
"Idname03":{"status":false,"candid":true}}
Msg jsonobject=mapper.readValue(input, Msg.class);

static class Msg {
    @JsonIgnore
    private Object pfm1;
    @JsonIgnore
    private Object pfm2;
    @JsonIgnore
    private Object pfm3;
    private Map<String, Object> pfm = new HashMap<String, Object>();
    public Object getPfm1() {return pfm1;}
    public void setMpfm1(Object pfm1) {this.pfm1 = pfm1;}
    public Object getPfm2() {return mpfm2;}
    public void setPfm2(Object pfm2) {this.pfm2 = pfm2;}
    public Object getPfm3() {return mpfm3;}
    public void setPfm3(Object pfm3) {this.pfm3 = pfm3;}
    @JsonAnySetter
    public void set(String name, Object value) {
        mpfm.put(name, value);
    }
    public Msg(){
    }
}

【问题讨论】:

  • 你想要所有 3 pfm 属性单属性名称吗?你能用你想要的输出的例子来更新这个问题吗?
  • 类似这样的 {"Idname01":{"status":true,"candid":true}, "Idname02":{"status":false,"candid":true}, "Idname03 ":{"status":false,"candid":true}} 应将“Idname0X”定义为可在运行期间更改的变量。 @jsonproperty 只接受常量名。

标签: java json jackson


【解决方案1】:

在不使用 getter、setter 和 @jsonanygetter 的情况下找到了解决方案。只需使用对象节点。可以操纵您的 json 结构,包括更改名称属性。它更简单明了。

newNode.set("newname",node);
///convert constructed newNode to json
String jsonout = newNode.toString(); 

“newname”可以设置为存储变量。 node 是从顶层结构中提取的 Object 节点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-03
    • 2012-02-06
    相关资源
    最近更新 更多