@@ -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