@@ -425,14 +425,31 @@ protected final ContainerNode<?> deserializeContainerNonRecursive(JsonParser p,
425
425
if (t == null ) { // unexpected end-of-input (or bad buffering?)
426
426
t = JsonToken .NOT_AVAILABLE ; // to trigger an exception
427
427
}
428
- ContainerNode <?> newContainer = null ;
429
428
switch (t .id ()) {
430
429
case JsonTokenId .ID_START_OBJECT :
431
- value = newContainer = nodeFactory .objectNode ();
432
- break ;
430
+ {
431
+ ObjectNode newOb = nodeFactory .objectNode ();
432
+ JsonNode old = currObject .replace (propName , newOb );
433
+ if (old != null ) {
434
+ _handleDuplicateField (p , ctxt , nodeFactory ,
435
+ propName , currObject , old , newOb );
436
+ }
437
+ stack .push (curr );
438
+ curr = newOb ;
439
+ }
440
+ continue outer_loop ;
433
441
case JsonTokenId .ID_START_ARRAY :
434
- value = newContainer = nodeFactory .arrayNode ();
435
- break ;
442
+ {
443
+ ArrayNode newOb = nodeFactory .arrayNode ();
444
+ JsonNode old = currObject .replace (propName , newOb );
445
+ if (old != null ) {
446
+ _handleDuplicateField (p , ctxt , nodeFactory ,
447
+ propName , currObject , old , newOb );
448
+ }
449
+ stack .push (curr );
450
+ curr = newOb ;
451
+ }
452
+ continue outer_loop ;
436
453
case JsonTokenId .ID_STRING :
437
454
value = nodeFactory .textNode (p .getText ());
438
455
break ;
@@ -459,12 +476,6 @@ protected final ContainerNode<?> deserializeContainerNonRecursive(JsonParser p,
459
476
_handleDuplicateField (p , ctxt , nodeFactory ,
460
477
propName , currObject , old , value );
461
478
}
462
- // But for Arrays/Objects, need to iterate over contents
463
- if (newContainer != null ) {
464
- stack .push (curr );
465
- curr = newContainer ;
466
- continue outer_loop ;
467
- }
468
479
}
469
480
// reached not-property-name, should be END_OBJECT
470
481
} else {
0 commit comments