diff --git a/src/main/java/com/alibaba/fastjson/JSONReader.java b/src/main/java/com/alibaba/fastjson/JSONReader.java index 276ec180d6..481bda348a 100644 --- a/src/main/java/com/alibaba/fastjson/JSONReader.java +++ b/src/main/java/com/alibaba/fastjson/JSONReader.java @@ -70,17 +70,15 @@ public void startObject() { context = new JSONStreamContext(null, JSONStreamContext.StartObject); } else { startStructure(); - if (lastContext != null - && lastContext.parent == context) { + if(lastContext == null){ + context = new JSONStreamContext(context, JSONStreamContext.StartObject); + }else if(lastContext.parent == context){ context = lastContext; if (context.state != JSONStreamContext.StartObject) { context.state = JSONStreamContext.StartObject; } - } else { - context = new JSONStreamContext(context, JSONStreamContext.StartObject); } } - this.parser.accept(JSONToken.LBRACE, JSONToken.IDENTIFIER); } @@ -90,13 +88,10 @@ public void endObject() { } public void startArray() { - if (context == null) { - context = new JSONStreamContext(null, StartArray); - } else { + if (context != null) { startStructure(); - - context = new JSONStreamContext(context, StartArray); } + context = new JSONStreamContext(context, StartArray); this.parser.accept(JSONToken.LBRACKET); } @@ -132,24 +127,20 @@ private void endStructure() { } final int state = context.state; - int newState = -1; switch (state) { case PropertyKey: - newState = PropertyValue; + context.state = PropertyValue; break; case StartArray: - newState = ArrayValue; + context.state = ArrayValue; break; case PropertyValue: case StartObject: - newState = PropertyKey; + context.state = PropertyKey; break; default: break; } - if (newState != -1) { - context.state = newState; - } } public boolean hasNext() {