Jackson 创建不带引号的JSON
图书馆正在使用地图来使用一些额外的信息。此映射最终将转换为JSON对象,我需要设置请求信息以显示用于调试目的,如下所示:Jackson 创建不带引号的JSON,jackson,Jackson,图书馆正在使用地图来使用一些额外的信息。此映射最终将转换为JSON对象,我需要设置请求信息以显示用于调试目的,如下所示: map.put(“请求”,requestString) 我正在考虑使用Jackson专门创建一个不带引号的JSON,并希望设置为requestString 我正在构建有关请求的必要信息,并构建一个包含请求头、参数、方法等的映射 Jackson正在用引号创建完全有效的JSON,但当我在地图中设置这个生成的值时,它显示得很难看,因为有转义引号 所以Jackson创造了这个: {
map.put(“请求”,requestString)代码>
我正在考虑使用Jackson专门创建一个不带引号的JSON,并希望设置为requestString
我正在构建有关请求的必要信息
,并构建一个包含请求头、参数、方法等的映射
Jackson正在用引号创建完全有效的JSON,但当我在地图中设置这个生成的值时,它显示得很难看,因为有转义引号
所以Jackson创造了这个:
{
method : "POST",
path : "/register"
}
当我在地图中设置时,它会变成:
{
method : \"POST\",
path : \"/register\"
}
将此视为包含所有参数和其他请求信息的巨大映射
我想要的是:
{
method : POST,
path : /register
}
我知道这不是一个有效的JSON,但我将其作为一个字符串,用于接受字符串值的映射。以下测试通过(Jackson 2.5.0
)
因此,不带引号的伪JSON似乎不太合适
public class UnQuotesSerializer extends NonTypedScalarSerializerBase<String>
{
public UnQuotesSerializer() { super(String.class); }
/**
* For Strings, both null and Empty String qualify for emptiness.
*/
@Override
public boolean isEmpty(String value) {
return (value == null) || (value.length() == 0);
}
@Override
public void serialize(String value, JsonGenerator jgen, SerializerProvider provider) throws IOException {
jgen.writeRawValue(value);
}
@Override
public JsonNode getSchema(SerializerProvider provider, Type typeHint) {
return createSchemaNode("string", true);
}
@Override
public void acceptJsonFormatVisitor(JsonFormatVisitorWrapper visitor, JavaType typeHint) throws JsonMappingException {
if (visitor != null) visitor.expectStringFormat(typeHint);
}
}
这是生成不带引号的字符串
public class UnQuotesSerializer extends NonTypedScalarSerializerBase<String>
{
public UnQuotesSerializer() { super(String.class); }
/**
* For Strings, both null and Empty String qualify for emptiness.
*/
@Override
public boolean isEmpty(String value) {
return (value == null) || (value.length() == 0);
}
@Override
public void serialize(String value, JsonGenerator jgen, SerializerProvider provider) throws IOException {
jgen.writeRawValue(value);
}
@Override
public JsonNode getSchema(SerializerProvider provider, Type typeHint) {
return createSchemaNode("string", true);
}
@Override
public void acceptJsonFormatVisitor(JsonFormatVisitorWrapper visitor, JavaType typeHint) throws JsonMappingException {
if (visitor != null) visitor.expectStringFormat(typeHint);
}
}
ObjectMapper objectMapper = new ObjectMapper();
SimpleModule module = new SimpleModule("UnQuote");
module.addSerializer(new UnQuotesSerializer());
objectMapper.configure(JsonGenerator.Feature.QUOTE_FIELD_NAMES, false);
objectMapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
objectMapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARS, true);
objectMapper.registerModule(module);