class JsonUtil {

  private static ObjectMapper objectMapper = new ObjectMapper();

  private JsonUtil() {
  }

  /**
   * Convert an object to a Json string representation.
   *
   * @param object Object to convert.
   * @param <T>    Object's class.
   * @return Json string.
   */
  public static <T> String objectToJson(T object) {
    try {
      return objectMapper.writeValueAsString(object);
    } catch (JsonProcessingException e) {
      LOGGER.error("Cannot convert the object " + object + " to Json.", e);
      return null;
    }
  }

  /**
   * Convert a Json string to an object of a class.
   *
   * @param json  Json string to convert.
   * @param clazz Object's class.
   * @param <T>   Object's generic class.
   * @return Object.
   */
  public static <T> T jsonToObject(String json, Class<T> clazz) {<FILL_FUNCTION_BODY>}

  /**
   * Convert a Json string to a List of objects of a class.
   *
   * @param json  Json string to convert.
   * @param clazz Object's class.
   * @param <T>   Object's generic class.
   * @return List of objects.
   */
  public static <T> List<T> jsonToList(String json, Class<T> clazz) {
    try {
      CollectionType listType = objectMapper.getTypeFactory()
          .constructCollectionType(ArrayList.class, clazz);
      return objectMapper.reader().forType(listType).readValue(json);
    } catch (JsonProcessingException e) {
      LOGGER.error("Cannot convert the Json " + json + " to List of " + clazz.getName() + ".", e);
      return List.of();
    }
  }

}

    try {
      return objectMapper.readValue(json, clazz);
    } catch (IOException e) {
      LOGGER.error("Cannot convert the Json " + json + " to class " + clazz.getName() + ".", e);
      return null;
    }
  
<no_super_class>