code: private Map<String, Object> parseObjectInternal() throws IOException {
  		Map<String, Object> result = new HashMap<>();
  		
  		Type t;
  		while (true) {
  			t = lexer.readNextToken();
  			if (t == Type.END_OBJECT) {
  				break;
  			}
  			
  			if (!result.isEmpty()) {
  				//skip comma and read next token
  				if (t != Type.COMMA) {
  					throw new IOException("Unexpected token: " + t);
  				}
  				t = lexer.readNextToken();
  			}
  			
  			//first token must be the name
  			if (t != Type.STRING) {
  				throw new IOException("Unexpected token: " + t);
  			}
  			String name = lexer.readString();
  			
  			//skip colon
  			t = lexer.readNextToken();
  			if (t != Type.COLON) {
  				throw new IOException("Unexpected token: " + t);
  			}
  			
  			//next token must be the value
  			t = lexer.readNextToken();
  			Object value = readValue(t);
  			result.put(name, value);
  		}
  		
  		return result;
  	}
docs: Parses an object into a map without reading the
  {@link Type#START_OBJECT} token
  @return the parsed object
  @throws IOException if the input stream could not be read or if
  the input stream contained an unexpected token