code: private JsonToken startParsingObjectOrArray() throws IOException {
      JsonToken currentToken = startParsing();
      switch (currentToken) {
        case START_OBJECT:
          currentToken = nextToken();
          Preconditions.checkArgument(
              currentToken == JsonToken.FIELD_NAME || currentToken == JsonToken.END_OBJECT,
              currentToken);
          break;
        case START_ARRAY:
          currentToken = nextToken();
          break;
        default:
          break;
      }
      return currentToken;
    }
docs: Starts parsing an object or array by making sure the parser points to an object field name,
  first array value or end of object or array.
  
  <p>If the parser is at the start of input, {@link #nextToken()} is called. The current token
  must then be {@link JsonToken#START_OBJECT}, {@link JsonToken#END_OBJECT}, {@link
  JsonToken#START_ARRAY}, {@link JsonToken#END_ARRAY}, or {@link JsonToken#FIELD_NAME}. For an
  object only, after the method is called, the current token must be either {@link
  JsonToken#FIELD_NAME} or {@link JsonToken#END_OBJECT}.