Использование @JsonAnyGetter / @ JsonAnySetter для сериализации JSON и изменения имени свойства (Джексон) - PullRequest
0 голосов
/ 29 января 2020

У меня есть 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(){
    }
}

1 Ответ

0 голосов
/ 30 января 2020

Нашел решение для этого без использования геттеров, сеттеров и @jsonanygetter. Просто с помощью узла Object. можно манипулировать вашей json структурой, включая изменение свойства имени. это намного проще и понятнее.

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

"newname" может быть установлено как сохраненная переменная. узел - это объектный узел, извлеченный из верхней структуры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...