2013-07-01 2 views
2

У меня есть данные, что выглядит следующим образом:Джексон JSON Не Форматирование Правильно

{ 
    "status": "success", 
    "data": { 
     "irrelevant": { 
      "serialNumber": "XYZ", 
      "version": "4.6" 
     }, 
     "data": { 
      "lib": { 
       "files": [ 
        "data1", 
        "data2", 
        "data3", 
        "data4" 
       ], 
       "another file": [ 
        "file.jar", 
        "lib.jar" 
       ], 
       "dirs": [] 
      }, 
      "jvm": { 
       "maxHeap": 10, 
       "maxPermSize": "12" 
      }, 
      "serverId": "134", 
      "version": "2.3" 
     } 
    } 
} 

Вот функция, я использую приукрасить данные JSON:

public static String stringify(Object o, int space) { 
    ObjectMapper mapper = new ObjectMapper(); 
    try { 
     return mapper.writerWithDefaultPrettyPrinter().writeValueAsString(o); 
    } catch (Exception e) { 
     return null; 
    } 
} 

Я использую Jackson JSON Процессор для форматирования данных JSON в String. По какой-то причине формат JSON не в том формате, который мне нужен. При передаче данных в эту функцию, формат я получаю это:

{ 
    "status": "success", 
    "data": { 
     "irrelevant": { 
      "serialNumber": "XYZ", 
      "version": "4.6" 
     }, 
     "another data": { 
      "lib": { 
       "files": [ "data1", "data2", "data3", "data4" ], 
       "another file": [ "file.jar", "lib.jar" ], 
       "dirs": [] 
      }, 
      "jvm": { 
       "maxHeap": 10, 
       "maxPermSize": "12" 
      }, 
      "serverId": "134", 
      "version": "2.3" 
     } 
    } 
} 

Как вы можете видеть под «другие» данные объекта, массивы отображаются в виде одной целой линии вместо новой линии каждый элемент массива. Я не уверен, как изменить мою функцию stringify для ее форматирования данных JSON правильно.

ответ

3

Вы должны проверить, как выглядит DefaultPrettyPrinter. На самом деле интересным в этом классе является _arrayIndenter. Значением по умолчанию для этого свойства является класс FixedSpaceIndenter. Вы должны изменить его на класс Lf2SpacesIndenter.

Ваш метод должен выглядеть следующим образом:

public static String stringify(Object o) { 
    try { 
     ObjectMapper mapper = new ObjectMapper(); 
     DefaultPrettyPrinter printer = new DefaultPrettyPrinter(); 
     printer.indentArraysWith(new Lf2SpacesIndenter()); 
     return mapper.writer(printer).writeValueAsString(o); 
    } catch (Exception e) { 
     return null; 
    } 
} 
Смежные вопросы