2015-02-28 5 views
0

В библиотеке используется Карта, чтобы использовать дополнительную информацию. Эта карта в конечном счете, преобразовывается объект JSON и мне нужно установить информацию запроса для отображения для целей отладки, как это:Создание JSON без кавычек

map.put("request", requestString);

Я рассматриваю использовать Джексон специально для создания JSON без кавычек и хотят установить как requestString.

Я строй необходимой информации о Request и построении карты, включая заголовки запросов, параметры, метод и т.д.

Джексон создающие совершенно правильный JSON с кавычками, но когда я установил это значение, сгенерированное внутри карт, она отображается некрасиво из-за того, что скрылись кавычки.

Так Джексон создает это:

{ 
    method : "POST", 
    path : "/register" 
} 

Когда я установил это на карте, то получается так:

{ 
    method : \"POST\", 
    path : \"/register\" 
} 

Рассмотрим это как огромная карта, включая все параметры и другую информацию о запросе ,

То, что я хотел бы, чтобы хотеть этого:

{ 
    method : POST, 
    path : /register 
} 

Я знаю, что это не является допустимым JSON, но я использую это как строку на карте, которая принимает значения String.

ответ

2
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); 

Это генерирующий без цитирует строки.

0

Следующий тест проходит (Jackson 2.5.0)

@Test 
public void test() throws Exception { 
    ObjectMapper mapper = new ObjectMapper(); 
    Map map = new HashMap(); 
    map.put("method", "POST"); 
    map.put("request", "/register"); 
    String s = mapper.writeValueAsString(map); 
    Map map2 = mapper.readValue(s, Map.class); 
    Assert.assertEquals(map, map2); 
} 

так что ваш псевдо JSON без кавычек не кажется путь

Смежные вопросы