private Object readJSON() throws JSONException {
        switch (read(3)) {
            case zipObject:
                return readObject();
            case zipArrayString:
                return readArray(true);
            case zipArrayValue:
                return readArray(false);
            case zipEmptyObject:
                return new JSONObject();
            case zipEmptyArray:
                return new JSONArray();
            case zipTrue:
                return Boolean.TRUE;
            case zipFalse:
                return Boolean.FALSE;
            default:
                return JSONObject.NULL;
        }
    }