@Override
	public String stringify(int level) {
		ArrayList<String> strArray = new ArrayList<String>();
		int width = 0;
		String strJSON;

		for (Entry<Object, JSON> e : mapObject.entrySet()) {
			strJSON = escape((String) e.getKey()) + ": " + e.getValue().stringify(level + 1);
			strArray.add(strJSON);
			width += strJSON.length() + 2;
		}
		if (width == 0)
			width = 2;

		String delim = "";
		String indent = LINE_SEPARATOR;
		StringBuilder sb = new StringBuilder("{");
		int n = strArray.size();

		if (widthForIndent >= 0 && width > widthForIndent) {
			// do indent {インデントする場合}
			for (int i = 0; i < level; ++i)
				indent += indentString;
			delim += indent;

			for (String e : strArray) {
				sb.append(delim);
				sb.append(indentString);
				sb.append(e);
				delim = "," + indent;
			}

			if (n > 0)
				sb.append(indent);
		} else {
			// do not indent {インデントしない場合}
			for (String e : strArray) {
				sb.append(delim);
				sb.append(e);
				delim = ", ";
			}
		}

		sb.append("}");
		return sb.toString();
	}