Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用@JsonAnyGetter/@JsonAnySetter序列化JSON并更改属性名(Jackson)_Java_Json_Jackson - Fatal编程技术网

Java 使用@JsonAnyGetter/@JsonAnySetter序列化JSON并更改属性名(Jackson)

Java 使用@JsonAnyGetter/@JsonAnySetter序列化JSON并更改属性名(Jackson),java,json,jackson,Java,Json,Jackson,我有一个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

我有一个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}}
阶级

静态类消息{
@杰索尼奥雷
私有对象pfm1;
@杰索尼奥雷
私有对象pfm2;
@杰索尼奥雷
私有对象pfm3;
私有映射pfm=新HashMap();
公共对象getPfm1(){return pfm1;}
public void setMpfm1(对象pfm1){this.pfm1=pfm1;}
公共对象getPfm2(){return mpfm2;}
public void setPfm2(对象pfm2){this.pfm2=pfm2;}
公共对象getPfm3(){return mpfm3;}
public void setPfm3(对象pfm3){this.pfm3=pfm3;}
@JSONANYSETER
公共无效集(字符串名称、对象值){
mpfm.put(名称、值);
}
公共消息(){
}
}

在不使用getter、setter和@jsonanygetter的情况下找到了解决方案。只需使用对象节点。可以操纵json结构,包括更改name属性。这要简单得多,直截了当得多

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

“newname”可以设置为存储变量。节点是从顶部结构提取的对象节点。

是否希望所有3个pfm属性都位于单个属性名称中?你能用你想要的输出的例子来更新这个问题吗?{“Idname01”:{“status”:true,“candid”:true},“Idname02”:{“status”:false,“candid”:true},“Idname03”:{“status”:false,“candid”:true}}。“Idname0X”应该定义为一个在运行期间可以更改的变量@jsonproperty只接受常量名称。
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(){
    }
}
newNode.set("newname",node);
///convert constructed newNode to json
String jsonout = newNode.toString();