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