class JsonUtil {

	private static final LFLog LOG = LFLoggerManager.getLogger(JsonUtil.class);

	private static final ObjectMapper objectMapper = new ObjectMapper();

	private JsonUtil() {
	}

	static {
		objectMapper.setTimeZone(TimeZone.getDefault());
	}

	public static String toJsonString(Object object) {
		if (ObjectUtil.isNull(object)) {
			return null;
		}
		try {
			return objectMapper.writeValueAsString(object);
		}
		catch (JsonProcessingException e) {
			String errMsg = StrUtil.format("Error while writing value as string[{}],reason: {}",
					object.getClass().getName(), e.getMessage());
			LOG.error(e.getMessage(), e);
			throw new JsonProcessException(errMsg);
		}
	}

	public static JsonNode parseObject(String text) {
		if (StrUtil.isEmpty(text)) {
			return null;
		}
		try {
			return objectMapper.readTree(text);
		}
		catch (IOException e) {
			String errMsg = StrUtil.format("Error while parsing text [{}],reason: {}", text, e.getMessage());
			LOG.error(e.getMessage(), e);
			throw new JsonProcessException(errMsg);
		}
	}

	public static <T> T parseObject(String json, Class<T> clazz) {<FILL_FUNCTION_BODY>}

}

		if (StrUtil.isEmpty(json)) {
			return null;
		}
		try {
			return objectMapper.readValue(json, clazz);
		}
		catch (IOException e) {
			String errMsg = StrUtil.format("Error while parsing text [{}],reason: {}", json, e.getMessage());
			LOG.error(e.getMessage(), e);
			throw new JsonProcessException(errMsg);
		}
	
<no_super_class>