You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by gn...@apache.org on 2020/01/27 15:47:23 UTC

[camel] 02/10: [CAMEL-14437] Improve json pretty printing

This is an automated email from the ASF dual-hosted git repository.

gnodet pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git

commit ff4afa753e0b6d704b95eba1a79deb7c21265665
Author: Guillaume Nodet <gn...@gmail.com>
AuthorDate: Fri Jan 24 13:53:16 2020 +0100

    [CAMEL-14437] Improve json pretty printing
---
 .../java/org/apache/camel/util/json/Jsoner.java    | 45 +++++++++++++++-------
 1 file changed, 32 insertions(+), 13 deletions(-)

diff --git a/tooling/camel-util-json/src/main/java/org/apache/camel/util/json/Jsoner.java b/tooling/camel-util-json/src/main/java/org/apache/camel/util/json/Jsoner.java
index 49e13cd..0db7d92 100644
--- a/tooling/camel-util-json/src/main/java/org/apache/camel/util/json/Jsoner.java
+++ b/tooling/camel-util-json/src/main/java/org/apache/camel/util/json/Jsoner.java
@@ -619,6 +619,10 @@ public final class Jsoner {
      * @since 2.2.0 to allow pretty printing with spaces instead of tabs.
      */
     public static String prettyPrint(final String printable, final int spaces) {
+        return prettyPrint(printable, spaces, Integer.MAX_VALUE);
+    }
+
+    public static String prettyPrint(final String printable, final int spaces, final int depth) {
         if ((spaces > 10) || (spaces < 2)) {
             throw new IllegalArgumentException("Indentation with spaces must be between 2 and 10.");
         }
@@ -626,7 +630,7 @@ public final class Jsoner {
         for (int i = 0; i < spaces; i++) {
             indentation.append(" ");
         }
-        return Jsoner.prettyPrint(printable, indentation.toString());
+        return Jsoner.prettyPrint(printable, indentation.toString(), depth);
     }
 
     /**
@@ -642,6 +646,10 @@ public final class Jsoner {
      *         JSON. It will return null if printable isn't a JSON string.
      */
     private static String prettyPrint(final String printable, final String indentation) {
+        return prettyPrint(printable, indentation, Integer.MAX_VALUE);
+    }
+
+    private static String prettyPrint(final String printable, final String indentation, final int depth) {
         final Yylex lexer = new Yylex(new StringReader(printable));
         Yytoken lexed;
         final StringBuilder returnable = new StringBuilder();
@@ -651,32 +659,43 @@ public final class Jsoner {
                 lexed = Jsoner.lexNextToken(lexer);
                 switch (lexed.getType()) {
                 case COLON:
-                    returnable.append(":");
+                    returnable.append(": ");
                     break;
                 case COMMA:
                     returnable.append(lexed.getValue());
-                    returnable.append("\n");
-                    for (int i = 0; i < level; i++) {
-                        returnable.append(indentation);
+                    if (level <= depth) {
+                        returnable.append("\n");
+                        for (int i = 0; i < level; i++) {
+                            returnable.append(indentation);
+                        }
+                    } else {
+                        returnable.append(" ");
                     }
                     break;
                 case END:
+                    returnable.append("\n");
                     break;
                 case LEFT_BRACE:
                 case LEFT_SQUARE:
                     returnable.append(lexed.getValue());
-                    returnable.append("\n");
-                    level++;
-                    for (int i = 0; i < level; i++) {
-                        returnable.append(indentation);
+                    if (++level <= depth) {
+                        returnable.append("\n");
+                        for (int i = 0; i < level; i++) {
+                            returnable.append(indentation);
+                        }
+                    } else {
+                        returnable.append(" ");
                     }
                     break;
                 case RIGHT_BRACE:
                 case RIGHT_SQUARE:
-                    returnable.append("\n");
-                    level--;
-                    for (int i = 0; i < level; i++) {
-                        returnable.append(indentation);
+                    if (level-- <= depth) {
+                        returnable.append("\n");
+                        for (int i = 0; i < level; i++) {
+                            returnable.append(indentation);
+                        }
+                    } else {
+                        returnable.append(" ");
                     }
                     returnable.append(lexed.getValue());
                     break;