Форматирование JSON перед записью в файл
В настоящее время я использую Джексон JSON процессор для записи данных предпочтений и прочего в файлы в основном потому, что я хочу, чтобы продвинутые пользователи могли изменять/создавать резервные копии этих данных. Джексон удивителен для этого, потому что его невероятно прост в использовании и, по-видимому, выполняет прилично (см. здесь), однако единственная проблема, с которой я, похоже, сталкиваюсь, - это когда я бегу myObjectMapper.writeValue(myFile, myJsonObjectNode)
он записывает все данные в ObjectNode
в одну строку. Что я хотел бы сделать, так это отформатировать JSON в более удобный формат.
например, если я передам ему простое дерево json, он напишет следующее:
{"testArray":[1,2,3,{"testObject":true}], "anotherObject":{"A":"b","C":"d"}, "string1":"i'm a string", "int1": 5092348315}
Я бы хотел, чтобы он отображался в файле как:
{
"testArray": [
1,
2,
3,
{
"testObject": true
}
],
"anotherObject": {
"A": "b",
"C": "d"
},
"string1": "i'm a string",
"int1": 5092348315
}
кто-нибудь знает, как я могу сделать это с Джексоном, или мне нужно получить строку JSON от Джексона и использовать другую стороннюю lib для ее форматирования?
спасибо заранее!
4 ответов
попробуйте создать объект Writer, как это
ObjectWriter writer = mapper.defaultPrettyPrintingWriter();
вам необходимо заранее настроить картограф следующим образом:
ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationConfig.Feature.INDENT_OUTPUT, true);
mapper.writeValue(myFile, myJsonObjectNode);
согласно вышеупомянутым комментариям, это сработало для меня очень хорошо,
Object json = mapper.readValue(content, Object.class);
mapper.writerWithDefaultPrettyPrinter().writeValueAsString(json);
здесь контент ваш ответ строки JSON
Джексон версия:2.12
для включения стандартного отступа в Jackson 2.0.2 и выше используйте следующее:
ObjectMapper myObjectMapper = new ObjectMapper();
myObjectMapper.enable(SerializationFeature.INDENT_OUTPUT);
myObjectMapper.writeValue(myFile, myJsonObjectNode)