@@ -1163,8 +1163,74 @@ public static String trunc(final String string, final Integer length) {
11631163 return result + omission ;
11641164 }
11651165
1166+ public static class JsonStringBuilder {
1167+ private final StringBuilder builder ;
1168+ private int ident ;
1169+ private boolean newString ;
1170+ private boolean newKey ;
1171+ private boolean newLine ;
1172+
1173+ public JsonStringBuilder () {
1174+ builder = new StringBuilder ();
1175+ }
1176+
1177+ public JsonStringBuilder append (final char character ) {
1178+ switch (character ) {
1179+ case '[' :
1180+ case '{' :
1181+ fillSpaces (newLine );
1182+ ident += 2 ;
1183+ break ;
1184+ case ']' :
1185+ case '}' :
1186+ ident -= 2 ;
1187+ builder .append ("\n " );
1188+ fillSpaces (true );
1189+ break ;
1190+ case '\"' :
1191+ newString = !newString ;
1192+ fillSpaces (newString && !newKey );
1193+ break ;
1194+ default :
1195+ break ;
1196+ }
1197+ builder .append (character );
1198+ if (character == ',' || character == '[' || character == '{' ) {
1199+ builder .append ("\n " );
1200+ newLine = true ;
1201+ } else {
1202+ newLine = false ;
1203+ }
1204+ if (character == ':' ) {
1205+ builder .append (' ' );
1206+ newKey = true ;
1207+ } else {
1208+ newKey = false ;
1209+ }
1210+ return this ;
1211+ }
1212+
1213+ public JsonStringBuilder append (final String string ) {
1214+ fillSpaces (!newString && !newKey );
1215+ builder .append (string );
1216+ return this ;
1217+ }
1218+
1219+ private void fillSpaces (final boolean condition ) {
1220+ if (condition ) {
1221+ for (int index = 0 ; index < ident ; index += 1 ) {
1222+ builder .append (' ' );
1223+ }
1224+ }
1225+ }
1226+
1227+ public String toString () {
1228+ return builder .toString ();
1229+ }
1230+ }
1231+
11661232 public static class JsonArray {
1167- public static void writeJson (Collection collection , StringBuilder builder ) {
1233+ public static void writeJson (Collection collection , JsonStringBuilder builder ) {
11681234 if (collection == null ) {
11691235 builder .append (NULL );
11701236 return ;
@@ -1192,7 +1258,7 @@ public static void writeJson(Collection collection, StringBuilder builder) {
11921258 builder .append (']' );
11931259 }
11941260
1195- public static void writeJson (byte [] array , StringBuilder builder ) {
1261+ public static void writeJson (byte [] array , JsonStringBuilder builder ) {
11961262 if (array == null ) {
11971263 builder .append (NULL );
11981264 } else if (array .length == 0 ) {
@@ -1210,7 +1276,7 @@ public static void writeJson(byte[] array, StringBuilder builder) {
12101276 }
12111277 }
12121278
1213- public static void writeJson (short [] array , StringBuilder builder ) {
1279+ public static void writeJson (short [] array , JsonStringBuilder builder ) {
12141280 if (array == null ) {
12151281 builder .append (NULL );
12161282 } else if (array .length == 0 ) {
@@ -1228,7 +1294,7 @@ public static void writeJson(short[] array, StringBuilder builder) {
12281294 }
12291295 }
12301296
1231- public static void writeJson (int [] array , StringBuilder builder ) {
1297+ public static void writeJson (int [] array , JsonStringBuilder builder ) {
12321298 if (array == null ) {
12331299 builder .append (NULL );
12341300 } else if (array .length == 0 ) {
@@ -1246,7 +1312,7 @@ public static void writeJson(int[] array, StringBuilder builder) {
12461312 }
12471313 }
12481314
1249- public static void writeJson (long [] array , StringBuilder builder ) {
1315+ public static void writeJson (long [] array , JsonStringBuilder builder ) {
12501316 if (array == null ) {
12511317 builder .append (NULL );
12521318 } else if (array .length == 0 ) {
@@ -1264,7 +1330,7 @@ public static void writeJson(long[] array, StringBuilder builder) {
12641330 }
12651331 }
12661332
1267- public static void writeJson (float [] array , StringBuilder builder ) {
1333+ public static void writeJson (float [] array , JsonStringBuilder builder ) {
12681334 if (array == null ) {
12691335 builder .append (NULL );
12701336 } else if (array .length == 0 ) {
@@ -1282,7 +1348,7 @@ public static void writeJson(float[] array, StringBuilder builder) {
12821348 }
12831349 }
12841350
1285- public static void writeJson (double [] array , StringBuilder builder ) {
1351+ public static void writeJson (double [] array , JsonStringBuilder builder ) {
12861352 if (array == null ) {
12871353 builder .append (NULL );
12881354 } else if (array .length == 0 ) {
@@ -1300,7 +1366,7 @@ public static void writeJson(double[] array, StringBuilder builder) {
13001366 }
13011367 }
13021368
1303- public static void writeJson (boolean [] array , StringBuilder builder ) {
1369+ public static void writeJson (boolean [] array , JsonStringBuilder builder ) {
13041370 if (array == null ) {
13051371 builder .append (NULL );
13061372 } else if (array .length == 0 ) {
@@ -1318,25 +1384,25 @@ public static void writeJson(boolean[] array, StringBuilder builder) {
13181384 }
13191385 }
13201386
1321- public static void writeJson (char [] array , StringBuilder builder ) {
1387+ public static void writeJson (char [] array , JsonStringBuilder builder ) {
13221388 if (array == null ) {
13231389 builder .append (NULL );
13241390 } else if (array .length == 0 ) {
13251391 builder .append ("[]" );
13261392 } else {
1327- builder .append ("[ \" " );
1393+ builder .append ('[' ). append ( '\"' );
13281394 builder .append (String .valueOf (array [0 ]));
13291395
13301396 for (int i = 1 ; i < array .length ; i ++) {
1331- builder .append (" \" , \" " );
1397+ builder .append ('\"' ). append ( ',' ). append ( '\"' );
13321398 builder .append (String .valueOf (array [i ]));
13331399 }
13341400
1335- builder .append (" \" ]" );
1401+ builder .append ('\"' ). append ( ']' );
13361402 }
13371403 }
13381404
1339- public static void writeJson (Object [] array , StringBuilder builder ) {
1405+ public static void writeJson (Object [] array , JsonStringBuilder builder ) {
13401406 if (array == null ) {
13411407 builder .append (NULL );
13421408 } else if (array .length == 0 ) {
@@ -1356,7 +1422,7 @@ public static void writeJson(Object[] array, StringBuilder builder) {
13561422 }
13571423
13581424 public static class JsonObject {
1359- public static void writeJson (Map map , StringBuilder builder ) {
1425+ public static void writeJson (Map map , JsonStringBuilder builder ) {
13601426 if (map == null ) {
13611427 builder .append (NULL );
13621428 return ;
@@ -1384,7 +1450,7 @@ public static void writeJson(Map map, StringBuilder builder) {
13841450 }
13851451
13861452 public static class JsonValue {
1387- public static void writeJson (Object value , StringBuilder builder ) {
1453+ public static void writeJson (Object value , JsonStringBuilder builder ) {
13881454 if (value == null ) {
13891455 builder .append (NULL );
13901456 } else if (value instanceof String ) {
@@ -1490,7 +1556,7 @@ static void escape(String s, StringBuilder sb) {
14901556 }
14911557
14921558 public static String toJson (Collection collection ) {
1493- final StringBuilder builder = new StringBuilder ();
1559+ final JsonStringBuilder builder = new JsonStringBuilder ();
14941560
14951561 JsonArray .writeJson (collection , builder );
14961562 return builder .toString ();
@@ -1501,7 +1567,7 @@ public String toJson() {
15011567 }
15021568
15031569 public static String toJson (Map map ) {
1504- final StringBuilder builder = new StringBuilder ();
1570+ final JsonStringBuilder builder = new JsonStringBuilder ();
15051571
15061572 JsonObject .writeJson (map , builder );
15071573 return builder .toString ();
0 commit comments