code: public Object readObject()
      {
          JsonParser parser = new JsonParser(input, objsRead, getArgs());
          JsonObject<String, Object> root = new JsonObject();
          Object o;
          try
          {
              o = parser.readValue(root);
              if (o == JsonParser.EMPTY_OBJECT)
              {
                  return new JsonObject();
              }
          }
          catch (JsonIoException e)
          {
              throw e;
          }
          catch (Exception e)
          {
              throw new JsonIoException("error parsing JSON value", e);
          }
  
          Object graph;
          if (o instanceof Object[])
          {
              root.setType(Object[].class.getName());
              root.setTarget(o);
              root.put("@items", o);
              graph = convertParsedMapsToJava(root);
          }
          else
          {
              graph = o instanceof JsonObject ? convertParsedMapsToJava((JsonObject) o) : o;
          }
  
          // Allow a complete 'Map' return (Javascript style)
          if (useMaps())
          {
              return o;
          }
          return graph;
      }
docs: Read JSON input from the stream that was set up in the constructor, turning it into
  Java Maps (JsonObject's).  Then, if requested, the JsonObjects can be converted
  into Java instances.
  
  @return Java Object graph constructed from InputStream supplying
  JSON serialized content.