Как позволить Джексону генерировать строку JSON, используя одинарные кавычки или без кавычек?
Например, я хочу сгенерировать строку JSON для ng-style
:
<th ng-style="{width:247}" data-field="code">Code</th>
Но с Джексоном, результат:
<th ng-style="{"width":247}" data-field="code">Code</th>
Это не легко читать.
Поэтому я хочу, чтобы Джексон генерировал строку json с одинарными или без кавычек. Можно ли сделать это?
3 ответа
Если у вас есть контроль над ObjectMapper
экземпляр, затем настройте его для обработки и генерации JSON так, как вы хотите:
final ObjectMapper mapper = new ObjectMapper();
mapper.configure(JsonGenerator.Feature.QUOTE_FIELD_NAMES, false);
mapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
JsonGenerator.Feature.QUOTE_FIELD_NAMES
устарело, вместо этого вы можете использовать это:
mapper.configure(JsonWriteFeature.QUOTE_FIELD_NAMES.mappedFeature(), false);
mapper.configure(JsonReadFeature.ALLOW_UNQUOTED_FIELD_NAMES.mappedFeature(), true);
Обратите внимание, что
JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES
не устарел (на данный момент), соответствующий
JsonReadFeature
упоминается здесь только для полноты картины.
Самый простой и лучший вариант - использовать регулярное выражение и обновить строковое значение.
Пример кода приведен ниже.
partNumberList=partNumberList.replaceAll(":", ":\"").replaceAll("}", "\"}");
Полный код, как показано ниже
public static void main(String[] args) throws JsonParseException, JsonMappingException,
IOException {
TestJack obj = new TestJack();
//var jsonString ='{"it":"Stati Uniti d'America"}';
// jsonString =jsonString.replace("'", "\\\\u0027")
ObjectMapper mapper = new ObjectMapper();
String partNumberList = "[{productId:AS101R}, {productId:09902007}, {productId:09902002}, {productId:09902005}]";
partNumberList = partNumberList.replaceAll(":", ":\"").replaceAll("}", "\"}");
System.out.println(partNumberList);
mapper.configure(com.fasterxml.jackson.core.JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
List<ProductDto> jsonToPersonList = null;
jsonToPersonList = mapper.readValue(partNumberList, new TypeReference<List<ProductDto>>() {
});
System.out.println(jsonToPersonList);
}