diff --git a/src/main/java/de/korne127/circularJsonSerialiser/json/JSONArray.java b/src/main/java/de/korne127/circularJsonSerialiser/json/JSONArray.java index a0a51fb..a8fbe97 100644 --- a/src/main/java/de/korne127/circularJsonSerialiser/json/JSONArray.java +++ b/src/main/java/de/korne127/circularJsonSerialiser/json/JSONArray.java @@ -110,10 +110,14 @@ public Iterable skipFirst() { /** * Gibt einen formatierten String zurück, der alle Inhalte des JSON-Arrays beinhaltet. - * @param indentFactor Die Anzahl an Tabs, die vor den Unterelementen gesetzt werden soll + * @param indentFactor Die Anzahl an Tabs, die vor den Unterelementen gesetzt werden soll;
+ * -1, falls der String komprimiert sein soll * @return Ein formatierter String, der alle Inhalte des JSON-Arrays beinhaltet */ public String toString(int indentFactor) { + if (indentFactor == -1) { + return toCompressedString(); + } if (list.isEmpty()) { return "[]"; } @@ -125,6 +129,21 @@ public String toString(int indentFactor) { return json.substring(0, json.length() - 1) + "\n" + getTabs(indentFactor - 1) + "]"; } + /** + * Gibt einen komprimierten String zurück, der alle Inhalte des JSON-Arrays beinhaltet. + * @return Ein komprimierter String, der alle Inhalte des JSON-Arrays beinhaltet + */ + public String toCompressedString() { + if (list.isEmpty()) { + return "[]"; + } + StringBuilder json = new StringBuilder("["); + for (Object object : list) { + json.append(JSONWriter.writeElement(object, -1)).append(","); + } + return json.substring(0, json.length() - 1) + "]"; + } + /** * Gibt einen formatierten String zurück, der alle Inhalte des JSON-Arrays beinhaltet. * @return Ein formatierter String, der alle Inhalte des JSON-Arrays beinhaltet diff --git a/src/main/java/de/korne127/circularJsonSerialiser/json/JSONObject.java b/src/main/java/de/korne127/circularJsonSerialiser/json/JSONObject.java index c5cdde2..770d492 100644 --- a/src/main/java/de/korne127/circularJsonSerialiser/json/JSONObject.java +++ b/src/main/java/de/korne127/circularJsonSerialiser/json/JSONObject.java @@ -124,10 +124,14 @@ public Collection values() { /** * Gibt einen formatierten String zurück, der alle Inhalte des JSON-Objektes beinhaltet. - * @param indentFactor Die Anzahl an Tabs, die vor den Unterelementen gesetzt werden soll + * @param indentFactor Die Anzahl an Tabs, die vor den Unterelementen gesetzt werden soll;
+ * -1, falls der String komprimiert sein soll * @return Ein formatierter String, der alle Inhalte des JSON-Objektes beinhaltet */ public String toString(int indentFactor) { + if (indentFactor == -1) { + return toCompressedString(); + } if (map.size() == 0) { return "{}"; } @@ -140,6 +144,23 @@ public String toString(int indentFactor) { return json.substring(0, json.length() - 1) + "\n" + getTabs(indentFactor - 1) + "}"; } + /** + * Gibt einen komprimierten String zurück, der alle Inhalte des JSON-Objektes beinhaltet. + * @return Ein komprimierter String, der alle Inhalte des JSON-Objektes beinhaltet + */ + public String toCompressedString() { + if (map.size() == 0) { + return "{}"; + } + StringBuilder json = new StringBuilder("{"); + for (String key : keySet()) { + Object value = map.get(key); + json.append("\"").append(key).append("\":") + .append(JSONWriter.writeElement(value, -1)).append(","); + } + return json.substring(0, json.length() - 1) + "}"; + } + /** * Gibt einen formatierten String zurück, der alle Inhalte des JSON-Objektes beinhaltet. * @return Ein formatierter String, der alle Inhalte des JSON-Objektes beinhaltet diff --git a/src/main/java/de/korne127/circularJsonSerialiser/json/JSONWriter.java b/src/main/java/de/korne127/circularJsonSerialiser/json/JSONWriter.java index c4095a4..937d056 100644 --- a/src/main/java/de/korne127/circularJsonSerialiser/json/JSONWriter.java +++ b/src/main/java/de/korne127/circularJsonSerialiser/json/JSONWriter.java @@ -16,11 +16,13 @@ public class JSONWriter { * Es wird dafür {@link #writeElement(Object, int) writeElement(object, 0)} aufgerufen und * zurückgegeben. * @param object Das Objekt, das als JSON-String zurückgegeben werden soll + * @param compressed true - Der JSON-String, der zurückgegeben werden soll, soll komprimiert sein;
+ * false - Der JSON-String, der zurückgegeben werden soll, soll normal formatiert sein * @return Das angegebene Objekt als JSON-String * @throws IllegalStateException Wird geworfen, falls das Objekt nicht für JSON benutzbar ist. */ - public static String writeElement(Object object) { - return writeElement(object, 1); + public static String writeElement(Object object, boolean compressed) { + return writeElement(object, compressed ? -1 : 1); } /** diff --git a/src/main/java/de/korne127/circularJsonSerialiser/serialiser/Serialiser.java b/src/main/java/de/korne127/circularJsonSerialiser/serialiser/Serialiser.java index 4a04b25..80547ac 100644 --- a/src/main/java/de/korne127/circularJsonSerialiser/serialiser/Serialiser.java +++ b/src/main/java/de/korne127/circularJsonSerialiser/serialiser/Serialiser.java @@ -35,6 +35,7 @@ public class Serialiser { private Set ignoreSetterIDs; private CollectionHandling collectionHandling; private NewVariableHandling newVariableHandling; + private boolean compressedJson; /** * Enum, das die verschiedenen Optionen, wie sich der Serialiser verhalten soll, wenn @@ -117,6 +118,7 @@ public Serialiser() { ignoreSetterIDs = new HashSet<>(); collectionHandling = CollectionHandling.CONVERT_WITH_WARNING; newVariableHandling = NewVariableHandling.EXCEPTION; + compressedJson = false; } /** @@ -190,7 +192,16 @@ public void setNewVariableHandling(NewVariableHandling newVariableHandling) { this.newVariableHandling = newVariableHandling; } - + /** + * Überschreibt die Einstellung compressedJson, die bestimmt, ob die generierten JSON-Strings komprimiert + * sein sollen. + * @param compressedJson true - Die generierten JSON-Strings sollen komprimiert sein, also keine zusätzlichen + * Leerzeichen, Zeilenumbrüche oder Tabulatoren beinhalten;
+ * false - Die generierten JSON-Strings sollen normal formatiert sein + */ + public void setCompressedJson(boolean compressedJson) { + this.compressedJson = compressedJson; + } /** * Serialisiert das angegebene Objekt in ein JSON-Objekt, welches als String zurückgegeben wird.
@@ -205,7 +216,7 @@ public void setNewVariableHandling(NewVariableHandling newVariableHandling) { public String serialiseObject(Object object) throws SerialiseException { SerialiseProcess process = new SerialiseProcess(false, startSerialisingInSuperclass, methodParameters, ignoreExceptionIDs); - return JSONWriter.writeElement(process.serialise(object, null)); + return JSONWriter.writeElement(process.serialise(object, null), compressedJson); } /** @@ -245,7 +256,7 @@ public Map serialiseObjectSeparated(Object object) throws Serial Map resultMap = new HashMap<>(); for (Map.Entry entry : json.entrySet()) { - resultMap.put(entry.getKey(), entry.getValue().toString()); + resultMap.put(entry.getKey(), JSONWriter.writeElement(entry.getValue(), compressedJson)); } return resultMap; }