code: public static JsonValue parse(Reader reader) throws IOException {
      if (reader == null) {
        throw new NullPointerException(READER_IS_NULL);
      }
      DefaultHandler handler = new DefaultHandler();
      new JsonParser(handler).parse(reader);
      return handler.getValue();
    }
docs: Reads the entire input from the given reader and parses it as JSON. The input must contain a
  valid JSON value, optionally padded with whitespace.
  <p>
  Characters are read in chunks into an input buffer. Hence, wrapping a reader in an additional
  <code>BufferedReader</code> likely won't improve reading performance.
  </p>
  
  @param reader
  the reader to read the JSON value from
  @return a value that represents the parsed JSON
  @throws IOException
  if an I/O error occurs in the reader
  @throws ParseException
  if the input is not valid JSON