@@ -49,6 +49,8 @@ public class VPackParser {
49
49
private static final char SEPARATOR = ',' ;
50
50
private static final String NULL = "null" ;
51
51
private static final String NON_REPRESENTABLE_TYPE = "(non-representable type)" ;
52
+
53
+ private static final JsonFactory jf = new JsonFactory ();
52
54
private final Map <ValueType , VPackJsonDeserializer > deserializers ;
53
55
private final Map <String , Map <ValueType , VPackJsonDeserializer >> deserializersByName ;
54
56
private final Map <Class <?>, VPackJsonSerializer <?>> serializers ;
@@ -278,25 +280,31 @@ private void parse(
278
280
} else if (value .isBoolean ()) {
279
281
json .append (value .getAsBoolean ());
280
282
} else if (value .isString ()) {
281
- json .append (toJSONString (value .getAsString ()));
283
+ json .append ("\" " );
284
+ json .append (value .getAsString ().replace ("\" " , "\\ \" " ));
285
+ json .append ("\" " );
282
286
} else if (value .isDouble ()) {
283
287
json .append (value .getAsDouble ());
284
288
} else if (value .isInt ()) {
285
289
json .append (value .getAsLong ());
286
290
} else if (value .isNumber ()) {
287
291
json .append (value .getAsNumber ());
288
292
} 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 ("\" " );
290
296
} else if (value .isNull ()) {
291
297
json .append (NULL );
292
298
} else {
293
- json .append (toJSONString (NON_REPRESENTABLE_TYPE ));
299
+ json .append ((NON_REPRESENTABLE_TYPE ));
294
300
}
295
301
}
296
302
}
297
303
298
304
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 ("\" " );
300
308
json .append (FIELD );
301
309
}
302
310
@@ -381,17 +389,17 @@ public VPackSlice fromJson(final Iterable<String> jsons, final boolean includeNu
381
389
382
390
private void parse (final String json , final VPackBuilder builder , final boolean includeNullValues )
383
391
throws IOException {
384
- final JsonParser parser = new JsonFactory () .createParser (json );
392
+ final JsonParser parser = jf .createParser (json );
385
393
String fieldName = null ;
386
394
JsonToken token ;
387
395
while (!parser .isClosed () && (token = parser .nextToken ()) != null ) {
388
396
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 :
395
403
builder .add (fieldName , ValueType .ARRAY );
396
404
fieldName = null ;
397
405
break ;
@@ -453,7 +461,7 @@ private void parseValue(final VPackBuilder builder, final String fieldName, fina
453
461
public static String toJSONString (final String text ) {
454
462
final StringWriter writer = new StringWriter ();
455
463
try {
456
- final JsonGenerator generator = new JsonFactory () .createGenerator (writer );
464
+ final JsonGenerator generator = jf .createGenerator (writer );
457
465
generator .writeString (text );
458
466
generator .close ();
459
467
} catch (final IOException e ) {
0 commit comments