2013-07-01 171 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; 
    } 
} 

我現在用的是傑克遜JSON處理器將JSON數據格式化爲字符串。 出於某種原因,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; 
    } 
}