@@ -53,7 +53,7 @@ public JsonSerializer(StringBuilder builder) {
53
53
}
54
54
this .builder = builder ;
55
55
}
56
-
56
+
57
57
public void writeStartArray () {
58
58
builder .append ('[' );
59
59
}
@@ -84,7 +84,8 @@ public void writeString(String text) {
84
84
if (text == null ) {
85
85
writeNull ();
86
86
} else {
87
- builder .append ("\" " ).append (text ).append ("\" " );
87
+ // Escape double quotes to avoid breaking JSON format
88
+ builder .append ("\" " ).append (text .replace ("\" " , "\\ \" " )).append ("\" " );
88
89
}
89
90
}
90
91
@@ -314,7 +315,7 @@ public void writeMap(final Map<?, ?> map) {
314
315
writeNull ();
315
316
} else {
316
317
writeStartObject ();
317
- for (Iterator <? extends Map .Entry <?, ?>> entries = map .entrySet ().iterator (); entries .hasNext (); ) {
318
+ for (Iterator <? extends Map .Entry <?, ?>> entries = map .entrySet ().iterator (); entries .hasNext ();) {
318
319
Map .Entry <?, ?> entry = entries .next ();
319
320
writeObjectField (String .valueOf (entry .getKey ()), entry .getValue ());
320
321
if (entries .hasNext ()) {
@@ -326,16 +327,16 @@ public void writeMap(final Map<?, ?> map) {
326
327
}
327
328
328
329
public void writeObject (Object value ) {
329
-
330
+
330
331
// null
331
332
if (value == null ) {
332
333
writeNull ();
333
- }
334
-
334
+ }
335
+
335
336
else if (value instanceof String ) {
336
337
writeString ((String ) value );
337
- }
338
-
338
+ }
339
+
339
340
// number & boolean
340
341
else if (value instanceof Number ) {
341
342
Number n = (Number ) value ;
@@ -364,24 +365,23 @@ else if (value instanceof Number) {
364
365
writeBoolean ((Boolean ) value );
365
366
} else if (value instanceof AtomicBoolean ) {
366
367
writeBoolean (((AtomicBoolean ) value ).get ());
367
- }
368
-
368
+ }
369
+
369
370
// list & collection
370
371
else if (value instanceof List ) {
371
372
final List <?> list = (List <?>) value ;
372
373
writeArray (list );
373
374
} else if (value instanceof Collection ) {
374
375
final Collection <?> collection = (Collection <?>) value ;
375
376
writeArray (collection );
376
- }
377
-
377
+ }
378
+
378
379
// map
379
380
else if (value instanceof Map ) {
380
381
final Map <?, ?> map = (Map <?, ?>) value ;
381
382
writeMap (map );
382
383
}
383
384
384
-
385
385
// arrays
386
386
else if (value instanceof char []) {
387
387
final char [] charValues = (char []) value ;
@@ -411,7 +411,7 @@ else if (value instanceof char[]) {
411
411
final Object [] values = (Object []) value ;
412
412
writeArray (values );
413
413
}
414
-
414
+
415
415
else if (value instanceof JsonNode ) {
416
416
JsonNode node = (JsonNode ) value ;
417
417
@@ -462,7 +462,7 @@ else if (value instanceof JsonNode) {
462
462
case OBJECT :
463
463
case POJO :
464
464
writeStartObject ();
465
- for (Iterator <Map .Entry <String , JsonNode >> entries = node .fields (); entries .hasNext (); ) {
465
+ for (Iterator <Map .Entry <String , JsonNode >> entries = node .fields (); entries .hasNext ();) {
466
466
Map .Entry <String , JsonNode > entry = entries .next ();
467
467
writeObjectField (entry .getKey (), entry .getValue ());
468
468
if (entries .hasNext ()) {
@@ -475,7 +475,7 @@ else if (value instanceof JsonNode) {
475
475
case ARRAY :
476
476
ArrayNode arrayNode = (ArrayNode ) node ;
477
477
writeStartArray ();
478
- for (Iterator <JsonNode > elements = arrayNode .elements (); elements .hasNext (); ) {
478
+ for (Iterator <JsonNode > elements = arrayNode .elements (); elements .hasNext ();) {
479
479
writeObject (elements .next ());
480
480
if (elements .hasNext ()) {
481
481
builder .append (',' );
@@ -558,7 +558,7 @@ public void writeTree(TreeNode rootNode) {
558
558
writeNull ();
559
559
} else if (rootNode instanceof TextNode ) {
560
560
writeString (((TextNode ) rootNode ).asText ());
561
- } else if (rootNode instanceof BooleanNode ) {
561
+ } else if (rootNode instanceof BooleanNode ) {
562
562
writeBoolean (((BooleanNode ) rootNode ).asBoolean ());
563
563
} else if (rootNode instanceof NumericNode ) {
564
564
NumericNode numericNode = (NumericNode ) rootNode ;
@@ -595,5 +595,3 @@ public void close() {
595
595
// nothing to do
596
596
}
597
597
}
598
-
599
-
0 commit comments