private JsonToLogDataConverter<T> createListConverter(Type type) {
    Types.ListType list = type.asNestedType().asListType();
    Types.NestedField elementField = list.field(list.elementId());
    JsonToLogDataConverter<T> elementConverter = createConverter(elementField.type());
    Type elementType = elementField.type();

    return (jsonNode, context) -> {
      final ArrayNode node = (ArrayNode) jsonNode;
      Object[] array = null;
      for (int i = 0; i < node.size(); i++) {
        final JsonNode innerNode = node.get(i);
        Object value = elementConverter.convert(innerNode, context);
        Object flinkValue = convertSecondTimeIfNecessary(elementType, value);
        if (flinkValue != null) {
          if (array == null) {
            Class<?> flinkValueClass = flinkValue.getClass();
            array = (Object[]) Array.newInstance(flinkValueClass, node.size());
          }
          array[i] = flinkValue;
        }
      }
      array = array == null ? new Object[node.size()] : array;
      return arrayFactory.create(array);
    };
  }
Converter to convert {@link JsonNode} to log data.

@param <T> to indicate the log data type
amoro-format-iceberg/src/main/java/org/apache/amoro/log/JsonToLogDataConverters.java