protected Object convert(FormatInfo formatInfo, String path, JsonNode node) throws IOException {
        if (formatInfo instanceof BasicFormatInfo) {
            return convertBasic((BasicFormatInfo<?>) formatInfo, path, node);
        } else if (formatInfo instanceof ArrayFormatInfo) {
            FormatInfo elemFormatInfo = ((ArrayFormatInfo) formatInfo).getElementFormatInfo();
            // As flink treat StringArrayTypeInfo and ObjectArrayTypeInfo separately, so
            // we should follow this constraints in flink formats
            if (elemFormatInfo instanceof StringFormatInfo) {
                // string array
                return convertStringArray((ArrayFormatInfo) formatInfo, path, node);
            } else {
                // object array
                return convertArray((ArrayFormatInfo) formatInfo, path, node);
            }
        } else if (formatInfo instanceof MapFormatInfo) {
            return convertMap((MapFormatInfo) formatInfo, path, node);
        } else if (formatInfo instanceof RowFormatInfo) {
            return convert((RowFormatInfo) formatInfo, path, node);
        } else {
            throw new IllegalStateException(
                    String.format("unsupported format info %s (path=[%s], text=[%s]).",
                            formatInfo.getClass(), path, node));
        }
    }
Object mapper for parsing the JSON.
inlong-sort/sort-formats/format-rowdata/format-rowdata-json/src/main/java/org/apache/inlong/sort/formats/json/JsonRowDeserializationSchema.java