Skip to content

Commit e3613e2

Browse files
committed
improved toJson performances
1 parent 68d2cd8 commit e3613e2

File tree

2 files changed

+21
-13
lines changed

2 files changed

+21
-13
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
<groupId>com.arangodb</groupId>
66
<artifactId>velocypack</artifactId>
7-
<version>2.5.2</version>
7+
<version>2.5.3-SNAPSHOT</version>
88
<inceptionYear>2017</inceptionYear>
99
<packaging>jar</packaging>
1010

src/main/java/com/arangodb/velocypack/VPackParser.java

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ public class VPackParser {
4949
private static final char SEPARATOR = ',';
5050
private static final String NULL = "null";
5151
private static final String NON_REPRESENTABLE_TYPE = "(non-representable type)";
52+
53+
private static final JsonFactory jf = new JsonFactory();
5254
private final Map<ValueType, VPackJsonDeserializer> deserializers;
5355
private final Map<String, Map<ValueType, VPackJsonDeserializer>> deserializersByName;
5456
private final Map<Class<?>, VPackJsonSerializer<?>> serializers;
@@ -278,25 +280,31 @@ private void parse(
278280
} else if (value.isBoolean()) {
279281
json.append(value.getAsBoolean());
280282
} else if (value.isString()) {
281-
json.append(toJSONString(value.getAsString()));
283+
json.append("\"");
284+
json.append(value.getAsString().replace("\"", "\\\""));
285+
json.append("\"");
282286
} else if (value.isDouble()) {
283287
json.append(value.getAsDouble());
284288
} else if (value.isInt()) {
285289
json.append(value.getAsLong());
286290
} else if (value.isNumber()) {
287291
json.append(value.getAsNumber());
288292
} else if (value.isDate()) {
289-
json.append(toJSONString(DateUtil.format(value.getAsDate())));
293+
json.append("\"");
294+
json.append(DateUtil.format(value.getAsDate()).replace("\"", "\\\""));
295+
json.append("\"");
290296
} else if (value.isNull()) {
291297
json.append(NULL);
292298
} else {
293-
json.append(toJSONString(NON_REPRESENTABLE_TYPE));
299+
json.append((NON_REPRESENTABLE_TYPE));
294300
}
295301
}
296302
}
297303

298304
private static void appendField(final String attribute, final StringBuilder json) {
299-
json.append(toJSONString(attribute));
305+
json.append("\"");
306+
json.append(attribute.replace("\"", "\\\""));
307+
json.append("\"");
300308
json.append(FIELD);
301309
}
302310

@@ -381,17 +389,17 @@ public VPackSlice fromJson(final Iterable<String> jsons, final boolean includeNu
381389

382390
private void parse(final String json, final VPackBuilder builder, final boolean includeNullValues)
383391
throws IOException {
384-
final JsonParser parser = new JsonFactory().createParser(json);
392+
final JsonParser parser = jf.createParser(json);
385393
String fieldName = null;
386394
JsonToken token;
387395
while (!parser.isClosed() && (token = parser.nextToken()) != null) {
388396
switch (token) {
389-
case START_OBJECT:
390-
case VALUE_EMBEDDED_OBJECT:
391-
builder.add(fieldName, ValueType.OBJECT);
392-
fieldName = null;
393-
break;
394-
case START_ARRAY:
397+
case START_OBJECT:
398+
case VALUE_EMBEDDED_OBJECT:
399+
builder.add(fieldName, ValueType.OBJECT);
400+
fieldName = null;
401+
break;
402+
case START_ARRAY:
395403
builder.add(fieldName, ValueType.ARRAY);
396404
fieldName = null;
397405
break;
@@ -453,7 +461,7 @@ private void parseValue(final VPackBuilder builder, final String fieldName, fina
453461
public static String toJSONString(final String text) {
454462
final StringWriter writer = new StringWriter();
455463
try {
456-
final JsonGenerator generator = new JsonFactory().createGenerator(writer);
464+
final JsonGenerator generator = jf.createGenerator(writer);
457465
generator.writeString(text);
458466
generator.close();
459467
} catch (final IOException e) {

0 commit comments

Comments
 (0)