创建不带引号的 JSON

Cem*_*emo 3 jackson

图书馆正在使用 Map 来使用一些额外信息。该地图最终会被转换为 JSON 对象,我需要设置请求信息以显示调试目的,如下所示:

map.put("request", requestString);

我正在考虑专门使用 Jackson 来创建不带引号的 JSON 并希望设置为requestString.

我正在构建有关Request并构建地图的必要信息,包括请求标头、参数、方法等。

Jackson 正在使用引号创建完全有效的 JSON,但是当我在映射内设置此生成值时,由于转义了引号,它显示得很丑。

所以杰克逊正在创造这个:

{
   method : "POST",
   path : "/register"
}
Run Code Online (Sandbox Code Playgroud)

当我在地图中设置它时,它变成这样:

{
   method : \"POST\",
   path : \"/register\"
}
Run Code Online (Sandbox Code Playgroud)

将其视为一个巨大的地图,包括所有参数和有关请求的其他信息。

我想要的是这个:

{
   method : POST,
   path : /register
} 
Run Code Online (Sandbox Code Playgroud)

我知道这不是有效的 JSON,但我将其用作接受字符串值的 Map 的字符串。

Cem*_*emo 7

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);
   }
}
Run Code Online (Sandbox Code Playgroud)

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);
Run Code Online (Sandbox Code Playgroud)

这是生成不带引号的字符串。