是否有注释或其他方式告诉Jackson在没有引号的情况下序列化String变量的值。序列化程序只应序列化一个字段的值而不带引号。
我正在寻找类似于:
的回报{"name": "nameValue", "click" : function (e){console.log("message");}}
而不是
{"name": "nameValue", "click" : "function (e){console.log("message");}"}
以上是外部java脚本库如何需要数据,因此如果没有办法,我必须在Object Mapper将其转换为JSON后手动更改字符串。
答案 0 :(得分:10)
正如其他人所指出的那样,双引号在JSON中不是可选的,而是强制性的。
话虽如此,您可以使用注释JsonRawValue
来做您想做的事。
public class POJO {
public String name;
@JsonRawValue
public String click;
}
答案 1 :(得分:5)
嗯,技术上你可以做到。虽然结果不是有效的JSON,但杰克逊仍有可能:
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);
}
}
但我完全同意,此要求会导致标准违规,应予以修订。
答案 2 :(得分:2)
那是not valid JSON,所以你不能拥有它。 JSON是一种值传输格式,因此您无法传输函数。
如果你真的需要在JSON中返回函数,你可以在javascript中对结果进行后处理。