code: private void readArray(final JsonLevel level) throws EOFException {
          while (true) {
              readNextChar(level);
              if (this.currentChar == JSON_ST) {
                  level.pushMode(Mode.JSON_STRING_VALUE);
                  readValue(level);
              } else if (this.currentChar == O_CURLY) {
                  if (this.tree.isIntermediaryPath(level.jsonPointer())) {
                      this.pushLevel(Mode.JSON_OBJECT);
                      return;
                  }
                  level.pushMode(Mode.JSON_OBJECT_VALUE);
                  readValue(level);
              } else if (this.currentChar == O_SQUARE) {
                  if (this.tree.isIntermediaryPath(level.jsonPointer())) {
                      this.pushLevel(Mode.JSON_ARRAY);
                      return;
                  } else {
                      level.pushMode(Mode.JSON_ARRAY_VALUE);
                      readValue(level);
                  }
              } else if (this.currentChar == JSON_T) {
                  level.pushMode(Mode.JSON_BOOLEAN_TRUE_VALUE);
                  readValue(level);
              } else if (this.currentChar == JSON_F) {
                  level.pushMode(Mode.JSON_BOOLEAN_FALSE_VALUE);
                  readValue(level);
              } else if (this.currentChar == JSON_N) {
                  level.pushMode(Mode.JSON_NULL_VALUE);
                  readValue(level);
              } else if (isNumber(this.currentChar)) {
                  level.pushMode(JSON_NUMBER_VALUE);
                  readValue(level);
              } else if (this.currentChar == JSON_COMMA) {
                  level.updateIndex();
                  level.setArrayIndexOnJsonPointer();
              } else if (this.currentChar == C_SQUARE) {
                  popAndResetToOldLevel();
                  return;
              }
          }
      }
docs: Handle the logic for reading down a JSON Array.
  
  @param level the current level.
  @throws EOFException if more data is needed.