code: public static UNode parseJSON(Reader reader) throws IllegalArgumentException {
          assert reader != null;
          SajListener listener = new SajListener();
          try {
              new JSONAnnie(reader).parse(listener);
          } finally {
              Utils.close(reader);
          }
          return listener.getRootNode();
      }
docs: Parse the JSON text from the given character Reader and return the appropriate
  UNode object. If an error occurs reading from the reader, it is passed to the
  caller. The reader is closed when parsing is done. The only JSON documents we
  allow are in the form:
  <pre>
  {"something": [value]}
  </pre>
  This means that when we parse the JSON, we should see an object with a single
  member. The UNode returned is a MAP object whose name is the member name and whose
  elements are parsed from the [value].
  
  @param  reader       Character reader contain JSON text to parse. The reader is
  closed when reading is complete.
  @return              UNode with type == {@link UNode.NodeType#MAP}.
  @throws IllegalArgumentException  If the JSON text is malformed or an error occurs
  while reading from the reader.