杰克逊字段值没有引号

ex0*_*b1t 5 java json annotations jackson

是否有注释或其他方式告诉Jackson序列化String变量的值而不带引号.序列化程序应仅序列化一个字段的值而不带引号.

我正在寻找类似于以下内容的回报:

{"name": "nameValue", "click" : function (e){console.log("message");}}
Run Code Online (Sandbox Code Playgroud)

代替

{"name": "nameValue", "click" : "function (e){console.log("message");}"}
Run Code Online (Sandbox Code Playgroud)

以上是外部java脚本库如何需要数据,因此如果没有办法,我必须在Object Mapper将其转换为JSON后手动更改字符串.

Sta*_*Man 10

正如其他人所指出的那样,双引号在JSON中不是可选的,而是强制性的.

话虽如此,您可以使用注释JsonRawValue来执行您想要的操作.

public class POJO {
  public String name;
  @JsonRawValue
  public String click;
}
Run Code Online (Sandbox Code Playgroud)


Jk1*_*Jk1 5

好吧,技术上你可以做到.虽然结果不是有效的JSON,但Jackson仍然可以:

class Dto  {
    @JsonProperty("name")
    String foo = "nameValue";
    @JsonProperty("click")
    JsEntry entry = new JsEntry("function (e){console.log(\"message\");}");
}

class JsEntry implements JsonSerializableWithType {
    private String value;

    JsEntry(String value) {
        this.value = value;
    }

    @Override
    public void serializeWithType(JsonGenerator jgen, SerializerProvider provider, TypeSerializer typeSer) throws IOException {
        this.serialize(jgen, provider);
    }

    @Override
    public void serialize(JsonGenerator jgen, SerializerProvider provider) throws IOException {
        jgen.writeRawValue(value);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我完全同意这一要求导致标准违规,应予以修订.