Форматирование 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)

Источник:https://github.com/FasterXML/jackson-databind