public JsonDocument addValue(String key, String value) {
            if (!newGroup) {
                // if this is not the first value in a group, put a comma
                json.append(",");
            }
            /* once we're here, the group is no longer "new" */
            newGroup = false;
            /* append the key/value */
            json.append("\"").append(key).append("\"");
            json.append(":");
            if (value.trim().startsWith("{") || value.trim().startsWith("[")) {
                // the value is either JSON or an array, so we won't aggregate with quotes
                json.append(value);
            } else {
                json.append("\"").append(value).append("\"");
            }
            return this;
        }
Pass in a Map and this method will return a JSON string.

<p>The map can contain Objects, int[], Object[] and Collections and they will be converted
into string representations.

<p>Nested maps can be included as values and the JSON will have nested object notation.

<p>Arrays/Collections can have Maps in them as well.

<p>See the unit tests for examples.

@param jsonData
zuul-core/src/main/java/com/netflix/zuul/util/JsonUtility.java