Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.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 如何更改自定义json序列化程序中的属性或字段名_Java_Json_Jackson - Fatal编程技术网

Java 如何更改自定义json序列化程序中的属性或字段名

Java 如何更改自定义json序列化程序中的属性或字段名,java,json,jackson,Java,Json,Jackson,我有一个自定义的字段序列化程序 public class SearchSerialize extends StdSerializer<Value> { public SearchSerialize() { super(Value.class); } @Override public void serialize(Value value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) t

我有一个自定义的字段序列化程序

public class SearchSerialize extends StdSerializer<Value> {

public SearchSerialize() {
    super(Value.class);
}
@Override
public void serialize(Value value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {

    if("database".equals(jsonGenerator.getOutputContext().getCurrentName())&&"abc".equals(value.getValue()))
        //change field name "database to "branchmark"
    else
        jsonGenerator.writeString(value.getValue());

}
}
公共类SearchSerialize扩展StdSerializer{
公共搜索序列化(){
super(Value.class);
}
@凌驾
public void serialize(Value-Value,JsonGenerator,JsonGenerator,SerializerProvider-SerializerProvider)引发IOException{
if(“database.equals”(jsongGenerator.getOutputContext().getCurrentName())和&“abc.equals”(value.getValue())
//将“字段名”数据库更改为“branchmark”
其他的
writeString(value.getValue());
}
}
它的值决定了字段名是否要更改,所以我不知道如何传递它。 使用jackson 2.9.0 谢谢!

看看这个

public class Response {
  private String status;
  private String error;

  @JsonProperty("p")
  @JsonSerialize(using = CustomSerializer.class)
  private Object data;

  // ...
}

public class CustomSerializer extends JsonSerializer<Object> {
  public void serialize(Object value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
    jgen.writeStartObject();
    jgen.writeObjectField(value.getClass().getName(), value);
    jgen.writeEndObject();
  }
}

public static void main(String... args) throws Exception {
  ObjectMapper mapper = new ObjectMapper();
  Response r1 = new Response("Error", "Some error", 20);
  System.out.println(mapper.writeValueAsString(r1));
  Response r2 = new Response("Error", "Some error", "some string");
  System.out.println(mapper.writeValueAsString(r2));
}
公共类响应{
私有字符串状态;
私有字符串错误;
@JsonProperty(“p”)
@JsonSerialize(使用=CustomSerializer.class)
私有对象数据;
// ...
}
公共类CustomSerializer扩展JsonSerializer{
public void serialize(对象值、JsonGenerator jgen、SerializerProvider提供程序)引发IOException、JsonProcessingException{
jgen.writeStartObject();
jgen.writeObject字段(value.getClass().getName(),value);
jgen.writeEndObject();
}
}
公共静态void main(字符串…参数)引发异常{
ObjectMapper mapper=新的ObjectMapper();
响应r1=新响应(“错误”,“某些错误”,20);
System.out.println(mapper.writeValueAsString(r1));
响应r2=新响应(“错误”、“某些错误”、“某些字符串”);
System.out.println(mapper.writeValueAsString(r2));
}
[来源]


您不能更改名称。非常感谢