public Object readValue() throws IOException, JSONException {
    int c = this.skipWSRead();

    switch(c) {
    case -1:
      return JSONReader.EOF;
    case JSON.BEGIN_ARRAY:
      return this.readArray();      
    case JSON.BEGIN_OBJECT:
      return this.readObject();
    case JSON.QUOTE_CHAR:
      return this.readString();
    default:
      this.unread(c);
      return this.readLiteralOrNumber();
    }
  }