public static JSONObject parseObject(ParseInfo info) throws Exception {
	if (info.peek() != '{') {
	    giveup(info, "Failure to begin an object with a {");
	} // if (info.peek() != '{')
	JSONObject obj = new JSONObject();
	String start = info.info();
	info.next();
	info.skipWhitespace();
	while ((!info.atEnd()) && (info.peek() != '}')) {
	    JSONString key = parseString(info);
	    info.skipWhitespace();
	    if (info.peek() != ':') {
		giveup(info, "Missing : after key " + key.value()
			+ " in object at " + start);
	    } // if (if no colon)
	    info.next();
	    info.skipWhitespace();
	    JSONValue value = parse(info);
	    obj.set(key.value(), value);
	    info.skipWhitespace();
	    if (info.peek() == ',') {
		info.next();
		info.skipWhitespace();
	    } else if (info.peek() == '}') {
		// Do nothing
	    } else {
		giveup(info, "Invalid character '" + info.peek() + "' object");
	    } // if invalid next character
	} // while
	if (info.peek() != '}') {
	    giveup(info, "Failed to end object beginning at " + start);
	} // if no right brace
	info.next();

	// And we're done
	return obj;
    } // parseObject