From a537c6ada9131722b081bff702734a5001311303 Mon Sep 17 00:00:00 2001 From: Marco Zanon Date: Thu, 29 Feb 2024 16:24:47 +0000 Subject: [PATCH] Implemented pretty print mode for MJsonArray and MJsonObject. --- CHANGELOG | 1 + .../com/marcozanon/macaco/MConstants.java | 3 ++ .../marcozanon/macaco/json/MJsonArray.java | 35 +++++++++++++++++-- .../marcozanon/macaco/json/MJsonBoolean.java | 11 +++++- .../com/marcozanon/macaco/json/MJsonNull.java | 11 +++++- .../marcozanon/macaco/json/MJsonNumber.java | 11 +++++- .../marcozanon/macaco/json/MJsonObject.java | 35 +++++++++++++++++-- .../marcozanon/macaco/json/MJsonString.java | 11 +++++- .../marcozanon/macaco/json/MJsonValue.java | 4 +++ 9 files changed, 114 insertions(+), 8 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 4a8a660..01b6c91 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -5,6 +5,7 @@ See LICENSE for details. ------------------ 9.1.0 (2024-02-29) ------------------ +* Implemented pretty print mode for MJsonArray and MJsonObject. * Implemented automatic stripping of newline characters when loading JSON objects. * Upgraded copyright notice to year 2024. diff --git a/src/main/java/com/marcozanon/macaco/MConstants.java b/src/main/java/com/marcozanon/macaco/MConstants.java index 2841b92..e3e391f 100644 --- a/src/main/java/com/marcozanon/macaco/MConstants.java +++ b/src/main/java/com/marcozanon/macaco/MConstants.java @@ -19,6 +19,9 @@ public class MConstants extends MObject { public static final Charset DEFAULT_CHARSET = StandardCharsets.UTF_8; + public static final String JSON_PRETTY_PRINT_MODE_EOL = "\r\n"; + public static final int JSON_PRETTY_PRINT_MODE_INDENTATION = 2; // characters + /* Threads. */ public static final String LOG_FILTER_MARK_MESSAGE_APPENDER_THREAD_ID = "logFilterMarkMessageAppender"; diff --git a/src/main/java/com/marcozanon/macaco/json/MJsonArray.java b/src/main/java/com/marcozanon/macaco/json/MJsonArray.java index 7b0a138..9a9c4a7 100644 --- a/src/main/java/com/marcozanon/macaco/json/MJsonArray.java +++ b/src/main/java/com/marcozanon/macaco/json/MJsonArray.java @@ -6,6 +6,7 @@ package com.marcozanon.macaco.json; +import com.marcozanon.macaco.MConstants; import com.marcozanon.macaco.text.MText; import java.util.LinkedList; @@ -204,14 +205,44 @@ public class MJsonArray extends MJsonValue { @Override public String getJsonValue() { + return this.getJsonValue(false); + } + + @Override + public String getJsonValue(boolean prettyPrintMode) { + return this.getJsonValue(prettyPrintMode, 0); + } + + @Override + protected String getJsonValue(boolean prettyPrintMode, int leftMargin) { StringBuilder s = new StringBuilder(""); // s.append("["); + if (prettyPrintMode) { + s.append(MConstants.JSON_PRETTY_PRINT_MODE_EOL); + } for (int i = 0; this.getValueCount() > i; i++) { if (0 < i) { - s.append(", "); + s.append(","); + if (prettyPrintMode) { + s.append(MConstants.JSON_PRETTY_PRINT_MODE_EOL); + } + else { + s.append(" "); + } + } + if (prettyPrintMode) { + for (int l = 0; (leftMargin + MConstants.JSON_PRETTY_PRINT_MODE_INDENTATION) > l; l++) { + s.append(" "); + } + } + s.append(this.getValues().get(i).getJsonValue(prettyPrintMode, leftMargin + MConstants.JSON_PRETTY_PRINT_MODE_INDENTATION)); + } + if (prettyPrintMode) { + s.append(MConstants.JSON_PRETTY_PRINT_MODE_EOL); + for (int l = 0; leftMargin > l; l++) { + s.append(" "); } - s.append(this.getValues().get(i).getJsonValue()); } s.append("]"); // diff --git a/src/main/java/com/marcozanon/macaco/json/MJsonBoolean.java b/src/main/java/com/marcozanon/macaco/json/MJsonBoolean.java index 0acb608..8fd8490 100644 --- a/src/main/java/com/marcozanon/macaco/json/MJsonBoolean.java +++ b/src/main/java/com/marcozanon/macaco/json/MJsonBoolean.java @@ -86,7 +86,16 @@ public class MJsonBoolean extends MJsonValue { @Override public String getJsonValue() { - return this.getValue().toString(); + return this.getJsonValue(false); + } + + @Override + public String getJsonValue(boolean prettyPrintMode) { + return this.getJsonValue(prettyPrintMode, 0); } + @Override + protected String getJsonValue(boolean prettyPrintMode, int leftMargin) { + return this.getValue().toString(); + } } diff --git a/src/main/java/com/marcozanon/macaco/json/MJsonNull.java b/src/main/java/com/marcozanon/macaco/json/MJsonNull.java index ab8a054..30f959c 100644 --- a/src/main/java/com/marcozanon/macaco/json/MJsonNull.java +++ b/src/main/java/com/marcozanon/macaco/json/MJsonNull.java @@ -65,7 +65,16 @@ public class MJsonNull extends MJsonValue { @Override public String getJsonValue() { - return "null"; + return this.getJsonValue(false); + } + + @Override + public String getJsonValue(boolean prettyPrintMode) { + return this.getJsonValue(prettyPrintMode, 0); } + @Override + protected String getJsonValue(boolean prettyPrintMode, int leftMargin) { + return "null"; + } } diff --git a/src/main/java/com/marcozanon/macaco/json/MJsonNumber.java b/src/main/java/com/marcozanon/macaco/json/MJsonNumber.java index 11c68c6..f281487 100644 --- a/src/main/java/com/marcozanon/macaco/json/MJsonNumber.java +++ b/src/main/java/com/marcozanon/macaco/json/MJsonNumber.java @@ -109,7 +109,16 @@ public class MJsonNumber extends MJsonValue { @Override public String getJsonValue() { - return this.getValue().toString(); + return this.getJsonValue(false); + } + + @Override + public String getJsonValue(boolean prettyPrintMode) { + return this.getJsonValue(prettyPrintMode, 0); } + @Override + protected String getJsonValue(boolean prettyPrintMode, int leftMargin) { + return this.getValue().toString(); + } } diff --git a/src/main/java/com/marcozanon/macaco/json/MJsonObject.java b/src/main/java/com/marcozanon/macaco/json/MJsonObject.java index 58bea7f..78bb4fd 100644 --- a/src/main/java/com/marcozanon/macaco/json/MJsonObject.java +++ b/src/main/java/com/marcozanon/macaco/json/MJsonObject.java @@ -6,6 +6,7 @@ package com.marcozanon.macaco.json; +import com.marcozanon.macaco.MConstants; import com.marcozanon.macaco.text.MText; import java.util.LinkedHashMap; import java.util.LinkedHashSet; @@ -257,19 +258,49 @@ public class MJsonObject extends MJsonValue { @Override public String getJsonValue() { + return this.getJsonValue(false); + } + + @Override + public String getJsonValue(boolean prettyPrintMode) { + return this.getJsonValue(prettyPrintMode, 0); + } + + @Override + protected String getJsonValue(boolean prettyPrintMode, int leftMargin) { StringBuilder s = new StringBuilder(""); // s.append("{"); + if (prettyPrintMode) { + s.append(MConstants.JSON_PRETTY_PRINT_MODE_EOL); + } int k = 0; for (String key: this.getValues().keySet()) { if (0 < k) { - s.append(", "); + s.append(","); + if (prettyPrintMode) { + s.append(MConstants.JSON_PRETTY_PRINT_MODE_EOL); + } + else { + s.append(" "); + } + } + if (prettyPrintMode) { + for (int l = 0; (leftMargin + MConstants.JSON_PRETTY_PRINT_MODE_INDENTATION) > l; l++) { + s.append(" "); + } } s.append("\"" + MJsonString.getEscapedString(key, false) + "\""); s.append(": "); - s.append(this.getValues().get(key).getJsonValue()); + s.append(this.getValues().get(key).getJsonValue(prettyPrintMode, leftMargin + MConstants.JSON_PRETTY_PRINT_MODE_INDENTATION)); k++; } + if (prettyPrintMode) { + s.append(MConstants.JSON_PRETTY_PRINT_MODE_EOL); + for (int l = 0; leftMargin > l; l++) { + s.append(" "); + } + } s.append("}"); // return s.toString(); diff --git a/src/main/java/com/marcozanon/macaco/json/MJsonString.java b/src/main/java/com/marcozanon/macaco/json/MJsonString.java index 5f3108c..aac7f2a 100644 --- a/src/main/java/com/marcozanon/macaco/json/MJsonString.java +++ b/src/main/java/com/marcozanon/macaco/json/MJsonString.java @@ -299,7 +299,16 @@ public class MJsonString extends MJsonValue { @Override public String getJsonValue() { - return "\"" + MJsonString.getEscapedString(this.getValue(), this.getExtendedEscapeMode()) + "\""; + return this.getJsonValue(false); + } + + @Override + public String getJsonValue(boolean prettyPrintMode) { + return this.getJsonValue(prettyPrintMode, 0); } + @Override + protected String getJsonValue(boolean prettyPrintMode, int leftMargin) { + return "\"" + MJsonString.getEscapedString(this.getValue(), this.getExtendedEscapeMode()) + "\""; + } } diff --git a/src/main/java/com/marcozanon/macaco/json/MJsonValue.java b/src/main/java/com/marcozanon/macaco/json/MJsonValue.java index a3ac786..9518e94 100644 --- a/src/main/java/com/marcozanon/macaco/json/MJsonValue.java +++ b/src/main/java/com/marcozanon/macaco/json/MJsonValue.java @@ -41,4 +41,8 @@ public abstract class MJsonValue extends MObject { public abstract String getJsonValue(); + public abstract String getJsonValue(boolean prettyPrintMode); + + protected abstract String getJsonValue(boolean prettyPrintMode, int leftMargin); + } -- 2.30.2