JSONArray toJSONArray(final Message.EncodeMode encodeMode) throws JSONException {
        JSONArray jsonArray = null;
        if (values != null) {
            jsonArray = new JSONArray();
            for (int i = 0; i < values.size(); i++) {
                Parameter param = values.get(i);
                if (encodeMode == Message.EncodeMode.VERBOSE) {
                    String paramName = param.getName();
                    if (paramName == null || paramName.length() == 0) {
                        paramName = "" + i;
                    }
                    if (param instanceof SingleParameter) {
                        JSONObject jsonObject = new JSONObject();
                        jsonObject.put(paramName, param.getValue());
                        jsonArray.put(jsonObject);
                    } else if (param instanceof ArrayParameter) {
                        ArrayParameter arrayParam = (ArrayParameter) param;
                        JSONObject jsonObject = new JSONObject();
                        jsonObject.put(paramName, arrayParam.toJSONArray(encodeMode));
                        jsonArray.put(jsonObject);
                    }
                } else {
                    if (param instanceof SingleParameter) {
                        jsonArray.put(param.getValue());
                    } else if (param instanceof ArrayParameter) {
                        ArrayParameter arrayParam = (ArrayParameter) param;
                        jsonArray.put(arrayParam.toJSONArray(encodeMode));
                    }
                }
            }
        }
        return jsonArray;
    }