Skip to content

Commit

Permalink
Einstellung, JSON-Strings zu komprimieren, hinzugefügt
Browse files Browse the repository at this point in the history
Es wurde die Einstellungsmöglichkeit compressedJson hinzugefügt. Diese ist standardmäßig auf false gesetzt. Sie bestimmt, ob die generierten JSON-Strings komprimiert sein sollen. Dies ist hilfreich, falls man z.B. das generierte JSON in einer Datenbank mit begrenztem Speicherplatz speichern möchte.
Da Leerzeichen beim Lesen des generierten JSON-Strings (außer in Schlüsseln oder Werten) ignoriert werden, kann ein komprimierter JSON-String gleich deserialisiert werden.
  • Loading branch information
Korne127 committed May 31, 2021
1 parent 517a6f2 commit 8e4bc68
Show file tree
Hide file tree
Showing 4 changed files with 60 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -110,10 +110,14 @@ public Iterable<Object> 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;<br>
* -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 "[]";
}
Expand All @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -124,10 +124,14 @@ public Collection<Object> 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;<br>
* -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 "{}";
}
Expand All @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;<br>
* 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);
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ public class Serialiser {
private Set<String> ignoreSetterIDs;
private CollectionHandling collectionHandling;
private NewVariableHandling newVariableHandling;
private boolean compressedJson;

/**
* Enum, das die verschiedenen Optionen, wie sich der Serialiser verhalten soll, wenn
Expand Down Expand Up @@ -117,6 +118,7 @@ public Serialiser() {
ignoreSetterIDs = new HashSet<>();
collectionHandling = CollectionHandling.CONVERT_WITH_WARNING;
newVariableHandling = NewVariableHandling.EXCEPTION;
compressedJson = false;
}

/**
Expand Down Expand Up @@ -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;<br>
* 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.<br>
Expand All @@ -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);
}

/**
Expand Down Expand Up @@ -245,7 +256,7 @@ public Map<String, String> serialiseObjectSeparated(Object object) throws Serial

Map<String, String> resultMap = new HashMap<>();
for (Map.Entry<String, JSONObject> entry : json.entrySet()) {
resultMap.put(entry.getKey(), entry.getValue().toString());
resultMap.put(entry.getKey(), JSONWriter.writeElement(entry.getValue(), compressedJson));
}
return resultMap;
}
Expand Down

0 comments on commit 8e4bc68

Please sign in to comment.