Skip to content

Commit

Permalink
Small Improvements 3
Browse files Browse the repository at this point in the history
  • Loading branch information
sathishk committed Feb 8, 2024
1 parent 8d46e15 commit f89894f
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 65 deletions.
61 changes: 16 additions & 45 deletions src/main/java/com/techatpark/sjson/core/Json.java
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,6 @@ public final class Json {
private static final int CAPACITY = 10;



/**
* Number 0.
*/
Expand All @@ -53,7 +52,6 @@ public final class Json {
*/
private static final String ILLEGAL_JSON_VALUE = "Illegal value at ";


/**
* Reads JSON as a Java Object.
* <p>
Expand Down Expand Up @@ -98,10 +96,7 @@ public String jsonText(final Map<String, Object> jsonMap) {
builder.append("\"")
.append(escapeJsonTxt(entry.getKey()))
.append("\":"); // Create Key value separator

Object value = entry.getValue();

valueText(builder, value);
valueText(builder, entry.getValue());
}
return builder.append("}").toString();
}
Expand Down Expand Up @@ -133,21 +128,15 @@ public String jsonText(final List<Object> jsonArray) {
* @param value
*/
private void valueText(final StringBuilder builder, final Object value) {
if (value == null) {
builder.append("null");
} else if (value instanceof String str) {
processString(builder, str);
} else if (value instanceof Map map) {
builder.append(jsonText(map));
} else if (value instanceof List list) {
builder.append(jsonText(list));
} else {
builder.append(value);
switch (value) {
case null -> builder.append("null");
case String str -> processString(builder, str);
case Map map -> builder.append(jsonText(map));
case List list -> builder.append(jsonText(list));
default -> builder.append(value);
}
}



/**
* Process String.
*
Expand All @@ -156,9 +145,7 @@ private void valueText(final StringBuilder builder, final Object value) {
*/
private void processString(final StringBuilder builder,
final String value) {
builder.append("\"")
.append(escapeJsonTxt(value))
.append("\"");
builder.append("\"").append(escapeJsonTxt(value)).append("\"");
}

/**
Expand Down Expand Up @@ -307,31 +294,16 @@ private String getString() throws IOException {
case '\\':
character = getCharacter(reader.read());
switch (character) {
case 'b':
sb.append('\b');
break;
case 't':
sb.append('\t');
break;
case 'n':
sb.append('\n');
break;
case 'f':
sb.append('\f');
break;
case 'r':
sb.append('\r');
break;
case 'u':
sb.append((char) Integer
case 'b' -> sb.append('\b');
case 't' -> sb.append('\t');
case 'n' -> sb.append('\n');
case 'f' -> sb.append('\f');
case 'r' -> sb.append('\r');
case 'u' -> sb.append((char) Integer
.parseInt(new String(next(LENGTH)),
RADIX));
break;
case '"', '\'', '\\', '/':
sb.append(character);
break;
default:
throw new IllegalArgumentException(
case '"', '\'', '\\', '/' -> sb.append(character);
default -> throw new IllegalArgumentException(
ILLEGAL_JSON_VALUE);
}
break;
Expand Down Expand Up @@ -680,6 +652,5 @@ private void setCursor(final Character character) {
cursor = character;
}


}
}
35 changes: 15 additions & 20 deletions src/test/java/com/techatpark/sjson/core/PerformanceTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -41,43 +41,38 @@ void testRead(Path path) throws IOException {
JsonNode jacksonJsonNode;
JsonElement gsonObject;

Instant start;
long start;

long jacksonsTime, jsonTime, gsonTime, oursTime;
long jacksonsSize, jsonSize, gsonSize, oursSize;

// 1. SJson
start = Instant.now();
// Measure SJson
start = System.nanoTime();
ourJsonObject = sJson.read(new BufferedReader(new FileReader(path.toFile())));
oursTime = Duration.between(start, Instant.now()).toNanos();
oursTime = System.nanoTime() - start;
oursSize = meter.measureDeep(ourJsonObject);

// 2. Org Json
start = Instant.now();
// Measure Org Json
start = System.nanoTime();
orgJSONObject = new JSONObject(new BufferedReader(new FileReader(path.toFile())));
jsonTime = Duration.between(start, Instant.now()).toNanos();
jsonTime = Math.round((float) ((jsonTime - oursTime) * 100) / jsonTime);
jsonTime = System.nanoTime() - start - oursTime;
jsonSize = meter.measureDeep(orgJSONObject);

// 3. Jackson
start = Instant.now();
// Measure Jackson
start = System.nanoTime();
jacksonJsonNode = jackson.readTree(new BufferedReader(new FileReader(path.toFile())));
jacksonsTime = Duration.between(start, Instant.now()).toNanos();
jacksonsTime = Math.round((float) ((jacksonsTime - oursTime) * 100) / jacksonsTime);
jacksonsTime = System.nanoTime() - start - oursTime;
jacksonsSize = meter.measureDeep(jacksonJsonNode);

// 4. Gson
start = Instant.now();
// Measure Gson
start = System.nanoTime();
gsonObject = JsonParser.parseReader(new BufferedReader(new FileReader(path.toFile())));
gsonTime = Duration.between(start, Instant.now()).toNanos();
gsonTime = Math.round((float) ((gsonTime - oursTime) * 100) / gsonTime);
gsonTime = System.nanoTime() - start - oursTime;
gsonSize = meter.measureDeep(gsonObject);

// 5. SJson with Jackson
String reversedJsonText = jackson.writeValueAsString(ourJsonObject);

// Check Correctness of the parser
Assertions.assertEquals(gsonObject,
JsonParser.parseReader(new StringReader(reversedJsonText)),
JsonParser.parseReader(new StringReader(jackson.writeValueAsString(ourJsonObject))),
"Reverse JSON Failed for " + path);

System.out.format("%33s%20s%20s%20s%10s%20s%20s%20s\n",
Expand Down

0 comments on commit f89894f

Please sign in to comment.