code: public void writeImpl(Object obj, boolean showType) throws IOException
      {
          writeImpl(obj, showType, true, true);
      }
docs: Main entry point (mostly used internally, but may be called from a Custom JSON writer).
  This method will write out whatever object type it is given, including JsonObject's.
  It will handle null, detecting if a custom writer should be called, array, array of
  JsonObject, Map, Map of JsonObjects, Collection, Collection of JsonObject, any regular
  object, or a JsonObject representing a regular object.
  @param obj Object to be written
  @param showType if set to true, the @type tag will be output.  If false, it will be
  dropped.
  @throws IOException if one occurs on the underlying output stream.