我的数据如下:
{
"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数据。
答案 0 :(得分:3)
您应该查看DefaultPrettyPrinter的样子。这个类真的很有意思的是_arrayIndenter属性。此属性的默认值为FixedSpaceIndenter class。您应该使用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;
}
}
答案 1 :(得分:2)
我没有足够的声誉来添加评论,但是提及上面的答案
Lf2SpacesIndenter
已从较新的Jackson的API(2.7及更高版本)中删除,因此请使用:
printer.indentArraysWith(DefaultIndenter.SYSTEM_LINEFEED_INSTANCE);